首页 > 解决方案 > 查询对前“n”条记录求和

问题描述

我想仅对前“n”个日期记录的预测数量列求和。例如,对于每个项目编号,最早(或第一个)三个日期记录

当前查询:

SELECT gen.Item ,
        gen.DemandDate ,
        gen.ForecastQty 
FROM reports.v_special_demand_800 gen 
ORDER BY gen.Item, gen.DemandDate ASC

桌子

在此处输入图像描述

期望的结果

在此处输入图像描述

标签: sqlsql-servertsql

解决方案


为每条记录分配一个行号,按项目分区(这将为每个项目启动一个新的行计数器)并按 DemandDate 排序。然后对行号<= N的记录求和,按Item分组:

WITH CTE AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY Item ORDER BY DemandDate) as RowNum
    FROM reports.v_special_demand_800
)
SELECT Item, SUM(ForecastQty)
FROM CTE
WHERE RowNum <= 3
GROUP BY Item

推荐阅读