从多列返回具有最高ID的记录

时间:2016-02-16 17:04:29

标签: mysql

我的桌子正在接收来自两个GPS设备的坐标和纬度+其他信息。每当GPS发送新的iformation时,它会将ID递增1。我想要一个从设备1和设备2获取最高ID(最后收到的信息)的查询,这样我就可以将它显示给我的GoogleMap应用程序。有人可以帮我查询吗? 我表中的行如下所示:

Table
===============================
ID    LAT     LNG      DeviceID
1     #       #        1
2     #       #        1
3     #       #        1 
4     #       #        1  <---This
1     #       #        2
2     #       #        2
3     #       #        2  
4     #       #        2  <---This

2 个答案:

答案 0 :(得分:0)

使用类似的东西:

SELECT DeviceID, max(ID) from Table GROUP BY DeviceID

每个设备ID都有一行

答案 1 :(得分:0)

要获取ID列和DeviceID,您应该group按ID,并选择组中的最大ID。

SELECT MAX(ID), DeviceID 
FROM Table 
GROUP BY DeviceID

但是在mysql中你不允许聚合非分组列,在这种情况下,mysql只返回第一行。所以首先你需要订购它,然后分组

select DeviceId, ANY_VALUE (LAT), ANY_VALUE(LNG), MAX(id)
from 
    (select * 
     from table 
     order by `DeviceID`, id desc, lat, lng)  x
group by `DeviceId`

或者您可以获得max(id)和DeviceId,然后使用Join来获取其他行。

select positions.id, positions.lat, positions.lng, positions.DeviceId
from positions
inner join 
    (select max(id) as mId, DeviceId 
     from positions
     group by DeviceId) maxt on (positions.id = maxt.mId and positions.DeviceId = maxt.DeviceId)