【发布时间】:2019-04-28 19:42:05
【问题描述】:
我有下表:
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(WEEK, Column1)和GROUP BY的某种组合应该可以满足您的需求。 -
您不需要光标。但提供您想要的结果(并设置某种 db fiddle)来澄清问题。
-
好的,修改了问题。
标签: sql sql-server database tsql