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;