我有一张表,用于存储设备 ID、消息、日期和时间。
我可以毫无问题地查询和获取所有记录,但是,我想做的是从每个设备获取最新消息。因此,例如,我的数据库如下所示:
device id msg date time
Device 0 -- Message 0 -- 2016 - 05 - 22 -- 08:00:00
Device 1 -- Message 1 -- 2016 - 05 - 22 -- 09:00:00
Device 0 -- Message 2 -- 2016 - 05 - 23 -- 10:00:00
Device 1 -- Message 3 -- 2016 - 05 - 23 -- 11:00:00
Device 0 -- Message 4 -- 2016 - 05 - 24 -- 17:00:00
Device 1 -- Message 5 -- 2016 - 05 - 24 -- 16:00:00
我希望结果是:
Device 0 -- Message 4 -- 2016 - 05 - 24 -- 17:00:00
Device 1 -- Message 5 -- 2016 - 05 - 24 -- 16:00:00
到目前为止,我只能按一列排序,每当我尝试使用连接或选择中的选择同时过滤 2 列时,我似乎无法使其工作。
最佳答案
可以访问 ROW_NUMBER()
的方言具有最佳方法。
WITH
sorted AS
(
SELECT
yourTable.*,
ROW_NUMBER() OVER (PARTITION BY device_id ORDER BY date_time_field DESC) AS ordinal
FROM
yourTable
)
SELECT
*
FROM
sorted
WHERE
ordinal = 1
其他人必须跳过更多的环节,首先找到每个设备的最新日期,然后重新找到相应的行。
SELECT
yourTable.*
FROM
yourTable
INNER JOIN
(
SELECT
device_id,
MAX(date_time_field) AS max_date_time
FROM
yourTable
)
latest
ON latest.device_id = yourTable.device_id
AND latest.max_date_time = yourTable.date_time_field
关于mysql - 使用SQL从两行的最大值中选择唯一的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37417491/