如何在SQL中按月份汇总过去24个月的销售数据(基于表内最新日期)
销售数据近24个月分产品月度汇总方案
1. 基于表内最新日期筛选近24个月数据
核心逻辑为先提取表内所有销售记录的最大日期,再以此为基准向前推24个月作为筛选阈值,WHERE条件通用写法如下:
WHERE SalesDate >= DATE_SUB((SELECT MAX(SalesDate) FROM 你的销售表名), INTERVAL 24 MONTH)
该写法完全基于表内的业务数据时间计算范围,不受服务器当前系统时间影响,匹配需求。
2. 按月份聚合数据并展示为月末日期
要把单日日期聚合到月份维度,同时输出为当月最后一天的格式(和给出的预期结果格式一致),需要先对日期做月份处理后取月末值,再按处理后的月份、产品字段分组求和销量即可,完整SQL示例(以MySQL为例):
SELECT LAST_DAY(SalesDate) AS SalesMONTH, Product, SUM(SLSqty) AS SLSqty FROM 你的销售表名 WHERE SalesDate >= DATE_SUB((SELECT MAX(SalesDate) FROM 你的销售表名), INTERVAL 24 MONTH) GROUP BY LAST_DAY(SalesDate), Product ORDER BY SalesMONTH, Product;
不同数据库的函数适配:
- SQL Server:用
EOMONTH(SalesDate)替代LAST_DAY(SalesDate),时间计算写为DATEADD(MONTH, -24, (SELECT MAX(SalesDate) FROM 你的销售表名)) - Oracle:用
LAST_DAY(TRUNC(SalesDate, 'MM'))替代LAST_DAY(SalesDate),时间计算写为ADD_MONTHS((SELECT MAX(SalesDate) FROM 你的销售表名), -24)
注:给出的预期结果中存在同月份同产品重复行,属于笔误,正常分组聚合后同一月份同一产品只会生成一条汇总记录。
内容的提问来源于stack exchange,提问作者Lookingforexperts
相关产品推荐
相关产品推荐

