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

MySQL按键列值分组获取最新日期的实现方案

MySQL 8.0 查询指定PO#下各子集最新日期记录方案

需求说明

查询指定PO编号下,每个采购单子集(subNo)对应的最新日期完整记录,包含id、date、subNo、poNo字段。

推荐方案1:窗口函数法(最可靠简洁)

利用MySQL 8.0支持的ROW_NUMBER()窗口函数,按子集分组并按日期降序排序,筛选每组第一条记录:

SELECT id, date, subNo, poNo
FROM (
    SELECT 
        id, date, subNo, poNo,
        -- 按subNo分组,每组内按date降序编号
        ROW_NUMBER() OVER (PARTITION BY subNo ORDER BY date DESC) AS rn
    FROM myTable
    WHERE poNo = '800' -- 替换为目标PO编号
) t
WHERE rn = 1; -- 筛选每组最新的第一条记录

推荐方案2:关联子查询法

先通过子查询获取每个子集的最新日期,再关联原表匹配完整记录:

SELECT m.id, m.date, m.subNo, m.poNo
FROM myTable m
INNER JOIN (
    -- 先拿到指定PO下每个subNo的最新日期
    SELECT subNo, MAX(date) AS max_date
    FROM myTable
    WHERE poNo = '800'
    GROUP BY subNo
) s 
ON m.subNo = s.subNo 
AND m.date = s.max_date 
AND m.poNo = '800'; -- 限定PO编号,避免跨PO匹配

针对你遇到的问题说明

  • GROUP BY失效:直接用GROUP BY subNo只能聚合出最大日期,但无法保证对应返回的id等其他字段是最新日期的那条记录(非ONLY_FULL_GROUP_BY模式下会返回随机行,开启该模式则直接报错)。
  • 表关联报错“Unknown column 's' in where clause”:通常是因为把子查询别名的关联条件写在了WHERE子句中,而非JOIN的ON子句里,导致别名作用域不生效。上述关联写法将条件放在ON中,可避免此问题。

内容的提问来源于stack exchange,提问作者Jörg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 14:15:35