我要先道歉,这是我关于stackoverflow的第一个问题......
我正在尝试查询一个记录表,其中每一行都有一个 VehicleID、纬度、经度、时间戳和各种其他字段。我需要的是只为每个 VehicleID 提取最近的纬度和经度。
编辑:删除术语唯一 ID,因为显然我使用不正确。
我要先道歉,这是我关于stackoverflow的第一个问题......
我正在尝试查询一个记录表,其中每一行都有一个 VehicleID、纬度、经度、时间戳和各种其他字段。我需要的是只为每个 VehicleID 提取最近的纬度和经度。
编辑:删除术语唯一 ID,因为显然我使用不正确。
如果唯一 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;
您可以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 by
clause) 的值。外层where
就选择这个值。
这是一个window
函数的例子,我鼓励你了解更多。
您的问题有一个狡辩:您将 id 描述为唯一的。但是,如果在不同的时间有多个值,那么它就不是唯一的。
检查此链接以实现行索引并利用分区来重置每个组。然后在您的 WHERE 子句中过滤掉不是第一个的结果。