繁体   English   中英

T-SQL 遍历日期

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM