SQL按Item分组后对最早n条日期记录的ForecastQty列求和方法
SQL实现方案
核心逻辑
先对每个Item编号分组,给组内记录按DemandDate升序排序打编号,筛选出每组最早的3条(可调整为任意n条)记录后,再按Item分组对ForecastQty求和即可。
通用SQL语句(兼容MySQL 8.0+、PostgreSQL、SQL Server、Oracle等支持窗口函数的数据库)
SELECT Item, SUM(ForecastQty) AS Sum_ForecastQty FROM ( -- 子查询:为每个Item下的记录按日期升序分配行号 SELECT gen.Item, gen.ForecastQty, ROW_NUMBER() OVER (PARTITION BY gen.Item ORDER BY gen.DemandDate ASC) AS row_num FROM reports.v_special_demand_800 gen ) filtered_data WHERE row_num <= 3 -- 此处数值可替换为你需要的每组取数条数n GROUP BY Item;
场景适配说明
- 如果同一个Item存在多条日期完全相同的记录,且你需要把同一天的所有记录都纳入最早3天的统计范围,可以将
ROW_NUMBER()替换为DENSE_RANK() - 如果需要保留符合条件的明细记录同时展示对应Item的求和结果,可以使用以下语句:
SELECT Item, DemandDate, ForecastQty, SUM(ForecastQty) OVER (PARTITION BY Item) AS Sum_ForecastQty FROM ( SELECT gen.Item, gen.DemandDate, gen.ForecastQty, ROW_NUMBER() OVER (PARTITION BY gen.Item ORDER BY gen.DemandDate ASC) AS row_num FROM reports.v_special_demand_800 gen ) filtered_data WHERE row_num <= 3 ORDER BY Item, DemandDate ASC;
内容的提问来源于stack exchange,提问作者Justin Brooks
相关产品推荐
相关产品推荐

