我的数据库上有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个可以来自同一设备。
任何人都可以帮助我吗?
答案 0 :(得分:0)
这是一种方式......尽管使用coorlative子查询的速度更快。
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
意图:
我的理解是你希望“Last”由Code字段确定的位置,记录每个设备。简单地说,您想知道系统中每个设备的最后报告位置;没有历史。
为了实现这一点,我假设您只关心设备表中设备的位置记录。因此,无论是否报告了最后一个位置,我们都会按照我们的要求开始使用设备。
需要为max(代码)设置别名,因为列名不是代码。