mysql - 使用SQL从两行的最大值中选择唯一的记录

标签 mysql sql

我有一张表,用于存储设备 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/

相关文章:

mysql - MySQL 中是否有类似的 generate_series 函数?

sql - 如何使用使用计数的 sql 子查询

mysql - 对文件的查询输出给出拒绝访问错误

mysql - 如何从多个没有关系的独立表中获取数据

MySQL 性能 - JOIN ON 与 JOIN USING 在多个表上的对比

MySQL 安全模式 : What Satisfies the Requirements?

MySQL 在同一列中按 ASC/DESC 混合排序

mysql - 为什么Mysql匹配 bool 模式找不到 "Knows"

mysql - 如何多次连接表以获取交易中每种类型的计数

mysql - 显示独立于 where 子句的所有连接结果