更新上一个已知位置?

时间:2014-01-30 14:05:07

标签: sql postgresql timestamp geometry postgis

我有一个大型数据表,其中有大约75,000人的位置 24小时的每一分钟。列是:

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

我的问题是来自该位置的一些(很多)信息 (the_geom)列缺失。此列需要使用最后一个进行更新 已知的人的位置。我在概念上就如何做到这一点而苦苦挣扎。我认为某种形式的自我加入。但是如何获得正确的数据 更新

我做了一个SQL小提琴来演示这个问题:

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

由于

詹姆斯

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