使用聚合函数仍报错:invoice_date未在聚合函数或GROUP BY子句中
解决SQL分组报错问题
错误原因分析
你写的SQL有两个核心问题:
- 用错聚合函数:要获取「最后一张发票日期」应该用
MAX(invoice_date),而非SUM(invoice_date)——SUM是对日期做求和运算,完全不符合需求。 - GROUP BY与窗口函数冲突:你同时使用了
GROUP BY item_id, location_name和窗口函数OVER(PARTITION BY location_name),但invoice_date既没包含在GROUP BY子句中,也没有被聚合处理,数据库无法确定如何在分组后处理这个字段,因此抛出错误。
正确写法(两种场景)
场景1:每个商品(item_id)显示其所在位置(location_name)的最后发票日期
不需要GROUP BY,直接用窗口函数按位置分区计算最大日期:
SELECT item_id, location_name, MAX(invoice_date) OVER(PARTITION BY location_name) AS LastInvoiceDate FROM items_report AS InactiveItems ORDER BY item_id
场景2:每个「商品+位置」组合的最后发票日期
用GROUP BY分组后,直接对每组的发票日期取最大值:
SELECT item_id, location_name, MAX(invoice_date) AS LastInvoiceDate FROM items_report AS InactiveItems GROUP BY item_id, location_name ORDER BY item_id
内容的提问来源于stack exchange,提问作者Quentin Lambkin
相关产品推荐
相关产品推荐

