MySQL 查询获取每个组的最后 N 行
MySQL Query get the last N rows per Group
假设我有一个包含以下列的数据库:
VehicleID|timestamp|lat|lon|
我可能有多次相同的 VehicleId 但时间戳不同。因此 VehicleId,Timestamp 是主键。
现在我想得到每个 VehicleId 的最后 N 个测量结果或每个 vehicleId 的前 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;
假设我有一个包含以下列的数据库:
VehicleID|timestamp|lat|lon|
我可能有多次相同的 VehicleId 但时间戳不同。因此 VehicleId,Timestamp 是主键。
现在我想得到每个 VehicleId 的最后 N 个测量结果或每个 vehicleId 的前 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;