假设我有一个包含以下列的数据库:
VehicleID|timestamp|lat|lon|
我可能有多个相同的车辆ID,但时间戳不同。因此,VehicleId、Timestamp是主键。
现在我想得到最后的每辆车的N个测量值,或者每辆车的前N个测量值。
如何根据每个VehicleId的排序列(例如,在本例中是时间戳)列出最后N个元组?
例子:
|VehicleId|Timestamp|
1|1
1|2
1|3
2|1
2|2
2|3
5|5
5|6
5|7
最佳答案
在MySQL中,这是最容易使用的变量:
select t.*
from (select t.*,
(@rn := if(@v = vehicle, @rn + 1,
if(@v := vehicle, 1, 1)
)
) as rn
from table t cross join
(select @v := -1, @rn := 0) params
order by VehicleId, timestamp desc
) t
where rn <= 3;