2014-01-30 23 views
1

我有一张大型的数据表,其中每天有大约75,000个人的位置在一天24小时内的地点 。列是:更新与上次了解的地点?

PPID(人ID) point_time(时间戳) the_geom(几何点)

我的问题是,从位置 (the_geom)列中的信息的一些(很多)丢失。此列需要使用该人的最后一个 已知位置进行更新。我在概念上正在努力如何做到这一点。我认为某种形式的自我加入。但是如何获取 更新的正确数据?

我做了一个SQL捣鼓这表明了问题:

http://sqlfiddle.com/#!15/77157/1

感谢

詹姆斯

回答

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 
+0

Blimey。做得好。太精彩了。非常感谢。我现在用我的大数据集运行它,看看它是如何发生的。 – TheRealJimShady