2

我要先道歉,这是我关于stackoverflow的第一个问题......

我正在尝试查询一个记录表,其中每一行都有一个 VehicleID、纬度、经度、时间戳和各种其他字段。我需要的是只为每个 VehicleID 提取最近的纬度和经度。

编辑:删除术语唯一 ID,因为显然我使用不正确。

4

3 回答 3

2

如果唯一 ID 是真正唯一的,那么您将始终拥有最新的纬度和经度,因为 ID 会随着每一行而改变。

如果唯一 ID 是外键(或引用来自不同表的唯一 ID 的 ID),您应该执行以下操作:

SELECT latitude, longitude, unique_id
FROM table INNER JOIN
(SELECT unique_id, MAX(timestamp) AS timestamp
FROM table
GROUP BY unique_id)t2 ON table.timestamp = t2.timestamp
AND table.unique_id = t2.unique_id;
于 2013-05-01T21:12:29.327 回答
2

您可以row_number()为此目的使用该功能:

select id, latitude, longitude, timestamp, . . .
from (select t.*,
             row_number() over (partition by id order by timestamp desc) as seqnum
      from t
     ) t
where seqnum = 1

row_number()函数为每个 id (clause) 分配一个顺序值,partition by最近的时间戳获取1(the order byclause) 的值。外层where就选择这个值。

这是一个window函数的例子,我鼓励你了解更多。

您的问题有一个狡辩:您将 id 描述为唯一的。但是,如果在不同的时间有多个值,那么它就不是唯一的。

于 2013-05-01T21:30:55.163 回答
1

检查此链接以实现行索引并利用分区来重置每个组。然后在您的 WHERE 子句中过滤掉不是第一个的结果。

于 2013-05-01T21:08:27.110 回答