我有一个数据库表结构
id,纬度,经度,海拔高度,deviceID,createdDate
我正在尝试创建一个查询,该查询获取最近创建的所有DISTINCT deviceID ..
我尝试过查询
SELECT DISTINCT deviceID
FROM `devicePosition`
ORDER BY createdDate desc
答案 0 :(得分:1)
可以在mysql中使用限制来实现此目的。
SELECT DISTINCT deviceID, createdDate
FROM `devicePosition`
ORDER BY createdDate desc
limit 1
另外,你可以在where子句
SELECT DISTINCT deviceID, createdDate
FROM `devicePosition`
WHERE createdDate = (select max(createdDate) from `devicePosition`)
答案 1 :(得分:1)
根据beiller的帖子,试试这个解决方案:
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和createdData”。这在subselect的where子句中最为重要:
where inner_dev_pos.deviceID = outer_dev_pos.deviceID
如果我们没有将同名域名inner_dev_pos和outer_dev_pos用于同一个表的两次访问,则该行将显示为:
where deviceID = deviceID
这显然没有意义。
答案 2 :(得分:0)
SELECT MAX(deviceID) FROM `devicePosition` GROUP BY deviceID
这将选择最新的,因为最大ID已经是最新的,并且可能更快,因为没有订购。
答案 3 :(得分:0)
如果你只是想要一对deviceID和last createdDate,那就使用GROUP BY
:
SELECT deviceID, max(createdDate)
FROM `devicePosition`
GROUP BY deviceID
ORDER BY createdDate desc;
这将获取每个deviceID 的最大createdDate 。