1

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

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
4

1 回答 1

4

在 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;
于 2015-09-22T11:54:09.750 回答