[英]MySQL - Query that select last row for each devices
我的数据库中有2个表:
CREATE TABLE IF NOT EXISTS `location` (
`code` int(11) NOT NULL AUTO_INCREMENT,
`IMEI` varchar(15) NOT NULL,
`latitude` decimal(10,6) NOT NULL,
`longitude` decimal(10,6) NOT NULL,
`speed` tinyint(3) unsigned NOT NULL,
`course` smallint(6) NOT NULL,
`satellites` tinyint(3) unsigned NOT NULL,
`datetime` datetime NOT NULL,
`rt_dif` tinyint(1) NOT NULL,
`pos_notpos` tinyint(1) NOT NULL,
`MCC` smallint(5) unsigned NOT NULL,
`MNC` smallint(5) unsigned NOT NULL,
`LAC` smallint(5) unsigned NOT NULL,
`CELL_ID` mediumint(8) unsigned NOT NULL,
PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2323 ;
CREATE TABLE IF NOT EXISTS `devices` (
`code` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`IMEI` varchar(15) NOT NULL,
`client` int(11) NOT NULL,
`model` varchar(50) NOT NULL,
PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
我有属于不同客户端的设备,我想选择给定客户端的每个设备的最后一个location
行。 位置消息可能以任何顺序出现,可能全部被打乱,或者最后1000条可能来自同一设备。
谁能帮我?
这是一种方法...尽管使用协调子查询的速度更快。
SELECT D.*, L.*
FROM Devices D
LEFT JOIN Location L
on D.IMEI = L.IMEI
INNER JOIN (Select max(Code) mCode, IMEI From Location group by IMEI) X
on D.IMEI = X.IMEI
and D.Code = X.mCode
意图:
我的理解是,您希望由位置的“代码”字段确定的“最后”记录每个设备。 简而言之,您想知道系统中每个设备的最后报告位置; 没有历史。
为此,我假设您只关心设备表中设备的位置记录。 因此,无论是否报告了最后一个位置,我们都希望所有设备都从设备入手的原因。
需要为max(code)加上别名,因为列名不是code。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.