You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL如何在ORDER BY排序后提取每个machine_id分组的首行最新记录

获取每个设备最新日期对应记录的SQL实现

方案1:窗口函数法(主流现代数据库通用,推荐)

适用于MySQL 8.0+、PostgreSQL、SQL Server、Oracle等支持窗口函数的数据库:

WITH ranked_records AS (
    SELECT
        *,
        -- 按设备ID分组,组内按日期倒序排序,给每行编号
        ROW_NUMBER() OVER (PARTITION BY machine_id ORDER BY date DESC) AS row_num
    FROM `table`
)
SELECT date, machine_id, colA, colB, colC
FROM ranked_records
WHERE row_num = 1;
  • 注意:如果同一设备同一最新日期存在多条记录,只需要返回其中一条时用ROW_NUMBER(),需要返回所有符合条件的记录时替换为RANK()即可。

方案2:关联子查询法(兼容低版本数据库)

适用于不支持窗口函数的场景(如MySQL 5.x版本):

SELECT t1.*
FROM `table` t1
INNER JOIN (
    -- 先查询每个设备对应的最新日期
    SELECT machine_id, MAX(date) AS latest_date
    FROM `table`
    GROUP BY machine_id
) t2 ON t1.machine_id = t2.machine_id AND t1.date = t2.latest_date;
  • 注意:该方案默认返回同一设备同一最新日期下的所有匹配记录。

内容的提问来源于stack exchange,提问作者Miquel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 19:48:02