我有一个DB表结构
id,纬度,经度,海拔,设备id,创建日期
我正在尝试创建一个查询,以获取最新创建的所有DISTINCT设备ID。。
我尝试了一个查询
SELECT DISTINCT deviceID
FROM `devicePosition`
ORDER BY createdDate desc
根据贝勒的帖子,尝试这个解决方案:
SELECT deviceID, createdDate
FROM `devicePosition` outer_dev_pos
WHERE createdDate = (
select max(inner_dev_pos.createdDate)
from `devicePosition` inner_dev_pos
where inner_dev_pos.deviceID = outer_dev_pos.deviceID
)
ORDER BY createdDate desc;
更新:解释:
在这个查询中,我们访问同一个表两次,一次在外部选择中,一次是在子选择(内部选择)中。因此,有必要在查询中说明我们所指的访问"deviceID"one_answers"createdData"。这在子选择的where子句中最为重要:
where inner_dev_pos.deviceID = outer_dev_pos.deviceID
如果我们不对同一表的两次访问使用别名inner_dev_pos和outer_dev_pos,那么这一行将为:
where deviceID = deviceID
这显然是没有道理的。
Limit可以在mysql中使用来实现这一点。
SELECT DISTINCT deviceID, createdDate
FROM `devicePosition`
ORDER BY createdDate desc
limit 1
此外,你可以在哪里条款
SELECT DISTINCT deviceID, createdDate
FROM `devicePosition`
WHERE createdDate = (select max(createdDate) from `devicePosition`)
SELECT MAX(deviceID) FROM `devicePosition` GROUP BY deviceID
这将选择最新的,因为最大ID已经是最新的了,并且可能会更快,因为没有订购。
如果您只想要一对设备ID和上次创建日期,那么使用GROUP BY
:
SELECT deviceID, max(createdDate)
FROM `devicePosition`
GROUP BY deviceID
ORDER BY createdDate desc;
这将获取每个设备ID的最大createdDate。