需要拉最新记录通过时间戳每唯一ID
我要去前面道歉,这是我对计算器的第一个问题...需要拉最新记录通过时间戳每唯一ID
我试图查询的记录表,其中每一行有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;
我尝试以下:'SELECT经纬度,VehicleKey FROM AVLVehiclePosition INNER JOIN (SELECT VehicleKey,MAX(时间戳)AS时间戳 FROM AVLVehiclePosition GROUP BY VehicleKey)T2 ON AVLVehiclePosition.timestamp = t2.timestamp AND AVLVehiclePosition。 VehicleKey = t2.VehicleKey;' 并且它返回了“消息209,级别16,状态1,行1 歧义列名'VehicleKey' – poisedforflight 2013-05-01 21:25:29
@poisedforflight选择列表中存在未限定的'VehicleKey',限定它:'AVLVehiclePosition。 VehicleKey'。 – 2013-05-01 21:30:55
可以使用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。但是,如果在不同时间有多个值,则它不是唯一的。
我可能使用的术语不正确,但是VehicleKey始终是所述车辆的VehicleKey。表格中可能有100辆车 – poisedforflight 2013-05-01 21:32:37
@poisedforflight。 。 。基于你的问题,'id'(或者你所说的任何东西)并不是唯一的。 。 。这是你问题的关键。 – 2013-05-01 21:45:13
你使用了哪个数据库?发布问题时,最好用数据库标记问题。 – 2013-05-01 21:07:46
Microsoft SQL 2005 – poisedforflight 2013-05-01 21:11:55
如果每行都有一个唯一的ID,那么recent_date(和任何其他字段)将在功能上依赖于该ID,并且将无法聚合数据。你想汇总哪些字段? *不*该ID。 – wildplasser 2013-05-01 21:12:31