Sql 当前和未来3周的总计相同,而不是运行总计

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

你好,我有一个有趣的要求。我有一个按分区计算的当前行和下面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    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;