2014-01-22 32 views
0

我有一個表格,其中存儲具有x,y和高程的網格。我有一些已知的高程和很多空的(NULL)高程。我試圖建立一個插入(簡單線性插值)缺失值的查詢,但我堅持在開始的方式:我什至不能寫一個查詢獲取最接近的非空值。我想要做的是使用引用外部查詢的子查詢,但這不起作用(「未知列」錯誤)。試圖從代表網格的表中獲得「最近」的結果查詢

這裏是我試過了,但是這不工作

SELECT tg.*, tx.elevation FROM `temp_grid` tg 
INNER JOIN 
(
SELECT xGrid, yGrid, elevation 
FROM temp_grid 
WHERE elevation IS NOT NULL 
AND yGrid > tg.yGrid 
ORDER BY yGrid 
LIMIT 1 
) ti ON tg.xGrid=ti.xGrid 
WHERE tg.elevation IS NULL 

我一直令人頭大我的大腦試圖想如何與聯接和GROUP BY做到這一點,但不能拿出任何東西......任何想法?

回答

1

你可以做到這一點作爲select子句中的子查詢:

SELECT tg.*, 
     (SELECT elevation 
     FROM temp_grid tg2 
     WHERE elevation IS NOT NULL AND 
       tg2.yGrid > tg.yGrid 
     ORDER BY tg2.yGrid 
     LIMIT 1 
     ) as elevation 
FROM `temp_grid` tg 
WHERE tg.elevation IS NULL; 

對於你的問題的其餘部分,你只需要改變whereorder by在子查詢來計算兩個點之間的距離,在你感興趣的方向。

+0

我甚至不知道你可以做到這一點(子查詢中的選擇與這種隱含的聯接)。即使我在xGrid和yGrid上添加了索引,結果仍然非常緩慢,但謝謝! (我解決了我的問題,將整個表加載到內存中,然後在那裏做...然後UPDATE語句永遠消失,但是哦...) – Aerik

相關問題