sql - 使用数据中的间隙运行 Sum
问题描述
我有一个关于分区运行总和的查询。它获取当前行和下面 3 行的数据集的 4 周运行总和。我的问题是数据集有差距,并且数据中没有所有星期,这导致我的运行总和不正确。我可以使用 SQL 来填写缺少的周数,以便我的 4 周运行总和准确。在下面的示例中,缺少 26/10 和 2/11 的数据,因此我未来 4 周的运行总和不准确
样本数据
Item_No Week_Starting_Monday Cover_Weeks Four_Weeks_Cover
6-KDDDORF 20201012 3 8
6-KDDDORF 20201019 2 9
6-KDDDORF 20201109 1 12
6-KDDDORF 20201116 2 11
6-KDDDORF 20201123 4 9
6-KDDDORF 20201130 5 5
所需数据
Item_No Week_Starting_Monday Cover_Weeks Four_Weeks_Cover
6-KDDDORF 20201012 3 5
6-KDDDORF 20201019 2 3
6-KDDDORF 20201109 1 12
6-KDDDORF 20201116 2 11
6-KDDDORF 20201123 4 9
6-KDDDORF 20201130 5 5
询问
SELECT t.*,
SUM(Cover_Weeks) OVER (PARTITION BY Item_No, (seqnum - 1) / 4) AS Four_Weeks_Cover
FROM (SELECT t.*,
ROW_NUMBER() OVER (PARTITION BY Item_No ORDER BY Week_Starting_Monday) - 1 as seqnum
FROM Table_Name t
) t;
解决方案
一种解决方案是cross apply
:
SELECT t.*, t2.cover_week_4
FROM Table_Name t CROSS APPLY
(SELECT SUM(t2.Cover_Weeks) as cover_week_4
FROM Table_Name t2
WHERE t2.Item_No = t.Item_No AND
t2.Week_starting_Monday <= t.Week_starting_Monday AND
t2.Week_starting_Monday >= DATEADD(day, -21, t.Week_starting_Monday)
) t2;
推荐阅读
- javascript - 替换数组中每个对象的值
- powershell - PowerShell,如何提供管道变量?
- c++ - boost::coroutine2 vs CoroutineTS
- android - 需要有关 android Recyclerview、NestedScrollView 设计的帮助
- payment-gateway - 与 Realex/全球支付的定期支付集成
- module - 关于 nSudoku 的问题,如果我们假设它是 NP 完全的
- node.js - 如何防止引号中的 Express.js 管道文件?
- c# - 如何在 C# 中实现 ehllapi
- mongodb - MongoDB聚合,计算数组中的每个项目并按项目分组
- python - 如何在 pandas DataFrame 中显示元素的频率?