我要在前面道歉,这是我关于stackoverflow的第一个问题...
我正在尝试查询记录表,其中每行都有VehicleID,纬度,经度,时间戳和各种其他字段。我需要的是只为每个VehicleID提取最新的纬度和经度。
编辑:删除术语唯一ID,因为显然我使用不正确。
答案 0 :(得分: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;
答案 1 :(得分:1)
您可以使用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(partition by
子句)分配一个顺序值,最新的时间戳记获取1
(order by
子句)的值。外where
只选择这一个值。
这是window
函数的示例,我建议您了解更多信息。
对您的问题提出一个狡辩:您将ID描述为唯一。但是,如果在不同时间有多个值,则它不是唯一的。
答案 2 :(得分:0)
选中此link以实现行索引并利用该分区重置每个组。然后在WHERE子句中过滤掉不是第一个的结果。