假设我有一个包含以下列的数据库:

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;

10-08 16:17