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