MySQL Query获取每组最后N行

时间:2015-09-22 11:52:19

标签: mysql sql mysql-variables

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

VehicleID|timestamp|lat|lon|

我可能有多次相同的VehicleId但具有不同的时间戳。因此,VehicleId,Timestamp是主键。

现在我想得到每辆VehicleId的最后N次测量值或每辆车的前N次测量值。

我如何根据每个VehicleId的排序列(例如我们的案例时间戳)列出最后N个元组?

示例:

|VehicleId|Timestamp|
         1|1
         1|2
         1|3
         2|1
         2|2
         2|3
         5|5
         5|6
         5|7

1 个答案:

答案 0 :(得分: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;