MySQL:如何使用最新创建的记录在一列上获取具有distinct子句的所有列

时间:2013-08-15 15:11:02

标签: mysql

我有一个数据库表结构

  

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

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

我尝试过查询

SELECT DISTINCT deviceID
FROM `devicePosition`
ORDER BY createdDate desc 

4 个答案:

答案 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