Sql 当前和未来3周的总计相同,而不是运行总计
你好,我有一个有趣的要求。我有一个按分区计算的当前行和下面3行的运行总数。它可以正常工作,但我希望分区的总数相同,而不是一个正在运行的总数。例如,对于前四行,四周封面应为14,对于下四行,总封面应为12,这是四行的总和Sql 当前和未来3周的总计相同,而不是运行总计,sql,tsql,Sql,Tsql,你好,我有一个有趣的要求。我有一个按分区计算的当前行和下面3行的运行总数。它可以正常工作,但我希望分区的总数相同,而不是一个正在运行的总数。例如,对于前四行,四周封面应为14,对于下四行,总封面应为12,这是四行的总和 Here is my sample Result Item_No Week_Starting_Monday Cover_Weeks Four_Weeks_Cover 6-KDDDORF 20201012 3 14 6-KDDDORF 20201019
Here is my sample Result
Item_No Week_Starting_Monday Cover_Weeks Four_Weeks_Cover
6-KDDDORF 20201012 3 14
6-KDDDORF 20201019 2 12
6-KDDDORF 20201026 5 12
6-KDDDORF 20201102 4 11
6-KDDDORF 20201109 1 12
6-KDDDORF 20201116 2 11
6-KDDDORF 20201123 4 9
6-KDDDORF 20201130 5 5
我希望结果是:
**
我的问题是:
SELECT
*, SUM (Cover_Weeks) OVER (PARTITION BY [Item_No] ORDER BY [Week_Starting_Monday] ROWS BETWEEN current row and 3 following) AS Four_Weeks_Cover
FROM
Table_Name
分配一个行号并除以4得到一个分组。然后在分组中求和:
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;
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;