需要按每个唯一ID的时间戳拉取最新记录

时间:2013-05-01 21:03:48

标签: sql sql-server sql-server-2005 greatest-n-per-group

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

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

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

3 个答案:

答案 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子句)分配一个顺序值,最新的时间戳记获取1order by子句)的值。外where只选择这一个值。

这是window函数的示例,我建议您了解更多信息。

对您的问题提出一个狡辩:您将ID描述为唯一。但是,如果在不同时间有多个值,则它不是唯一的。

答案 2 :(得分:0)

选中此link以实现行索引并利用该分区重置每个组。然后在WHERE子句中过滤掉不是第一个的结果。

相关问题