我有下表:
Column1 Column2 Column3
04/07/2019 1
04/08/2019 2
04/09/2019 8
04/10/2019 9
04/11/2019 15
04/12/2019 16
04/13/2019 5
04/14/2019 6
04/15/2019 8
04/16/2019 9
04/17/2019 10
04/18/2019 11
04/19/2019 5
04/20/2019 5
04/21/2019 8
04/22/2019 8
04/23/2019 9
04/24/2019 10
04/25/2019 11
04/26/2019 12
04/27/2019 10
我需要找到一种方法来遍历第一列中的值,并确定应该从星期六至星期日开始的几周。因此,在此示例中,一个迭代应该是从14到20。或者另一个迭代是从7号到13号,即星期六-星期日。然后在确定每个星期之后,我需要对其他列进行一些计算。如果1周内(基于星期六至星期日的Column1)的Column2总数超过40,则计算将更新Column3。然后在一周的下一个迭代中(星期六-星期日)也是如此。
所需结果:
Column1 Column2 Column3
04/07/2019 1 56
04/08/2019 2 56
04/09/2019 8 56
04/10/2019 9 56
04/11/2019 15 56
04/12/2019 16 56
04/13/2019 5 56
04/14/2019 6 54
04/15/2019 8 54
04/16/2019 9 54
04/17/2019 10 54
04/18/2019 11 54
04/19/2019 5 54
04/20/2019 5 54
04/21/2019 8 68
04/22/2019 8 68
04/23/2019 9 68
04/24/2019 10 68
04/25/2019 11 68
04/26/2019 12 68
04/27/2019 10 68
请注意:数据范围可能从3周到几个月。因此,代码需要捕获任何特定范围内的星期。
答案 0 :(得分:1)
您可以使用datepart()
来获取日期的星期。然后,您可以使用星期在窗口sum()
中进行分区。从那里,您可以UPDATE
将表连接到派生表,该表获得的总和如前所述。为确保一周从星期日开始,请在SET DATEFIRST 7
之前发出UPDATE
。
SET DATEFIRST 7;
UPDATE t1
SET t1.column3 = t3.column3
FROM elbat t1
INNER JOIN (SELECT t2.column1,
sum(t2.column2) OVER (PARTITION BY datepart(week, t2.column1)) column3
FROM elbat t2) t3
ON t3.column1 = t1.column1;