Mysql 试图得到;最近的;从表示网格的表中生成查询

Mysql 试图得到;最近的;从表示网格的表中生成查询,mysql,Mysql,我有一个表格,其中存储了一个带有x、y和高程的栅格。我有一些已知的高程和许多空(空)高程。我试图构建一个对缺失值进行插值(简单线性插值)的查询,但一开始我就被卡住了:我甚至不能编写一个获取最近非空值的查询。我想做的是使用引用外部查询的子查询,但这不起作用(“未知列”错误) 这是我试过的,但没用 SELECT tg.*, tx.elevation FROM `temp_grid` tg INNER JOIN ( SELECT xGrid, yGrid, elevation FROM temp_gr

我有一个表格,其中存储了一个带有x、y和高程的栅格。我有一些已知的高程和许多空(空)高程。我试图构建一个对缺失值进行插值(简单线性插值)的查询,但一开始我就被卡住了:我甚至不能编写一个获取最近非空值的查询。我想做的是使用引用外部查询的子查询,但这不起作用(“未知列”错误)

这是我试过的,但没用

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

我一直在绞尽脑汁想如何通过加入和分组来实现这一点,但什么都想不出来。。。有什么想法吗?

您可以在
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;

对于问题的其余部分,您只需更改子查询中的
where
order by
,以计算两个点之间的距离,即您感兴趣的方向。

我甚至不知道您可以这样做(select中的子查询带有这种隐含连接)。即使我在xGrid和yGrid上添加了索引,结果还是慢得令人痛苦,但谢谢!(我解决了我的问题,将整个表加载到内存中并在内存中执行…然后UPDATE语句会花费很长时间,但是哦,好吧…)