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

MySQL分组查询中获取对应max(date)的istAnzahl等字段值

解决方法

下面提供几种可靠的实现方式,用于获取每个artikelID组内date最大的完整记录:

方法1:使用窗口函数(推荐,支持PostgreSQL、MySQL 8+、SQL Server等)

窗口函数可直接为每个分组内的记录按date排序,标记出最新的那条:

SELECT artikelID, istAnzahl, sollAnzahl, date
FROM (
    SELECT 
        artikelID, 
        istAnzahl, 
        sollAnzahl, 
        date,
        ROW_NUMBER() OVER (PARTITION BY artikelID ORDER BY date DESC) AS rn
    FROM tbl_inventar
) t
WHERE rn = 1;
  • 逻辑:PARTITION BY artikelID按商品ID分组,ORDER BY date DESC让每组内最新记录排在最前,ROW_NUMBER()为每组记录编号,最后筛选编号为1的记录即可。

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

若数据库不支持窗口函数,可先通过子查询获取每个artikelID的最大date,再关联原表拿到对应字段:

SELECT t1.artikelID, t1.istAnzahl, t1.sollAnzahl, t1.date
FROM tbl_inventar t1
INNER JOIN (
    SELECT artikelID, MAX(date) AS max_date
    FROM tbl_inventar
    GROUP BY artikelID
) t2 ON t1.artikelID = t2.artikelID AND t1.date = t2.max_date;
  • 注意:若同一artikelID存在多条date相同且为最大值的记录,此方法会返回所有符合记录;如需仅返回一条,可添加额外排序条件。

方法3:LIMIT结合分组(仅部分数据库支持,如MySQL)

针对MySQL,可通过GROUP_CONCAT配合SUBSTRING_INDEX提取对应字段,但此方法仅适用于字符串或可转字符串的字段,数值型字段可能出现精度问题,仅作参考:

SELECT 
    artikelID,
    SUBSTRING_INDEX(GROUP_CONCAT(istAnzahl ORDER BY date DESC), ',', 1) AS istAnzahl,
    SUBSTRING_INDEX(GROUP_CONCAT(sollAnzahl ORDER BY date DESC), ',', 1) AS sollAnzahl,
    MAX(date) AS date
FROM tbl_inventar
GROUP BY artikelID;
  • 弊端:字段值含逗号会导致结果错误,数值字段会被转为字符串,优先使用前两种方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 08:40:31