簡體   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