按周计算DeltaQty累计值并求解CumulativeAvailQty的SQL问题
解决方案:计算库存周度累计可用量
要实现按InventoryID分组、按周累计DeltaQty并计算CumulativeAvailQty,不能用LAG函数(它仅能获取单一行的前序值,无法实现累加),正确的做法是使用SUM窗口函数来实现累计求和。
核心SQL语句
SELECT InventoryID, WeekEndDate, AvailableQty, DeltaQty, -- 计算当前及之前所有周的DeltaQty累计值 SUM(DeltaQty) OVER ( PARTITION BY InventoryID ORDER BY WeekEndDate ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) AS CumulativeDeltaQty, -- 累计Delta值加当期可用量得到累计可用量 AvailableQty + SUM(DeltaQty) OVER ( PARTITION BY InventoryID ORDER BY WeekEndDate ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) AS CumulativeAvailQty FROM InventoryWeekly ORDER BY InventoryID, WeekEndDate;
关键逻辑说明
PARTITION BY InventoryID:确保仅对同一个库存ID的记录进行累计计算ORDER BY WeekEndDate:按周结束日期排序,保证累计顺序是时间正序ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW:明确累计范围是从分组内第一行到当前行(该子句可省略,默认窗口范围即为该规则)
效果验证
对于每个InventoryID的每一周:
- 累加从第一周到当前周的所有
DeltaQty得到CumulativeDeltaQty - 用当期
AvailableQty加上这个累计值,得到最终的CumulativeAvailQty
内容的提问来源于stack exchange,提问作者Nick T
相关产品推荐
相关产品推荐

