我有一个数据库表结构
id, 纬度, 经度, 海拔, deviceID, createdDate
我正在尝试创建一个查询,该查询获取最近创建的所有 DISTINCT 设备ID..
我试过查询
SELECT DISTINCT deviceID
FROM `devicePosition`
ORDER BY createdDate desc
我有一个数据库表结构
id, 纬度, 经度, 海拔, deviceID, createdDate
我正在尝试创建一个查询,该查询获取最近创建的所有 DISTINCT 设备ID..
我试过查询
SELECT DISTINCT deviceID
FROM `devicePosition`
ORDER BY createdDate desc
可以在mysql中使用limit来实现这一点。
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`)
根据 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;
更新:说明:
我们在这个查询中访问同一个表两次,一次在外部选择中,一次在子选择中(内部选择)。因此,有必要在查询中说明我们指的是哪个access'deviceID和createdData。这在子选择的 where 子句中是最重要的:
where inner_dev_pos.deviceID = outer_dev_pos.deviceID
如果我们不对同一个表的两次访问使用别名 inner_dev_pos 和 outer_dev_pos,则此行将显示为:
where deviceID = deviceID
这显然没有意义。
如果您只是想要一对 deviceID 和 last createdDate,那么使用GROUP BY
:
SELECT deviceID, max(createdDate)
FROM `devicePosition`
GROUP BY deviceID
ORDER BY createdDate desc;
这将获取每个 deviceID 的最大 createdDate。
SELECT MAX(deviceID) FROM `devicePosition` GROUP BY deviceID
这将选择最新的,因为最大 ID 已经是最新的,并且可能会更快,因为没有订购。