[英]T-SQL go through Dates
我有下表:
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 号,也就是周六 - 周日。 然后在确定每周之后,我需要对其他列进行一些计算。如果 Column2 在 1 周内(基于 Column1 周六至周日)的总数超过 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 周到几个月不等。 因此,代码需要捕获任何特定范围的周数。
您可以使用datepart()
获取日期中的第几周。 然后,您可以使用这一周在窗口sum()
进行分区。 从那里你可以UPDATE
表加入派生表,获得前面提到的总和。 为了确保一周从星期日开始,在UPDATE
之前发出SET DATEFIRST 7
。
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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.