我有一个大型数据表,其中有大约75,000人的位置 24小时的每一分钟。列是:
ppid(人ID) point_time(时间戳) the_geom(几何点)
我的问题是来自该位置的一些(很多)信息 (the_geom)列缺失。此列需要使用最后一个进行更新 已知的人的位置。我在概念上就如何做到这一点而苦苦挣扎。我认为某种形式的自我加入。但是如何获得正确的数据 更新
我做了一个SQL小提琴来演示这个问题:
http://sqlfiddle.com/#!15/77157/1
由于
詹姆斯
答案 0 :(得分:0)
我不确定这将如何在更大的数据集上执行,但这是一个单一的查询解决方案,使用两个嵌套的子查询:
SELECT
data.ppid,
data.point_time,
CASE
WHEN data.the_geom IS NULL
THEN (
--Get all locations with an earlier time stamp for that ppid
SELECT geom.the_geom
FROM test_data geom
WHERE data.ppid = geom.ppid
AND geom.point_time < data.point_time
AND geom.the_geom IS NOT NULL
AND NOT EXISTS (
-- Cull all but the most recent one
SELECT *
FROM test_data cull
WHERE cull.ppid = geom.ppid
AND geom.the_geom IS NOT NULL
AND cull.point_time < data.point_time
AND cull.point_time > geom.point_time
AND cull.the_geom IS NOT NULL
)
)
ELSE data.the_geom
end
FROM test_data data