1

我有一个数据库表结构

id, 纬度, 经度, 海拔, deviceID, createdDate

我正在尝试创建一个查询,该查询获取最近创建的所有 DISTINCT 设备ID..

我试过查询

SELECT DISTINCT deviceID
FROM `devicePosition`
ORDER BY createdDate desc 
4

4 回答 4

1

可以在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`)
于 2013-08-15T15:14:32.913 回答
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;

更新:说明:

我们在这个查询中访问同一个表两次,一次在外部选择中,一次在子选择中(内部选择)。因此,有必要在查询中说明我们指的是哪个access'deviceID和createdData。这在子选择的 where 子句中是最重要的:

where inner_dev_pos.deviceID = outer_dev_pos.deviceID

如果我们不对同一个表的两次访问使用别名 inner_dev_pos 和 outer_dev_pos,则此行将显示为:

where deviceID = deviceID

这显然没有意义。

于 2013-08-15T15:19:36.677 回答
0

如果您只是想要一对 deviceID 和 last createdDate,那么使用GROUP BY

SELECT deviceID, max(createdDate)
FROM `devicePosition`
GROUP BY deviceID
ORDER BY createdDate desc;

这将获取每个 deviceID 的最大 createdDate

于 2013-08-15T15:29:34.693 回答
0
SELECT MAX(deviceID) FROM `devicePosition` GROUP BY deviceID

这将选择最新的,因为最大 ID 已经是最新的,并且可能会更快,因为没有订购。

于 2013-08-15T15:22:06.380 回答