给定表:
id date count cumulative_sum
1 2 100
2 1 50
3 1 10
4 2 5
如何更新date
, id
排序的cumulative_sum
结果应该是:
id date count cumulative_sum
2 1 50 50
3 1 10 60
1 2 100 160
4 2 5 165
当我插入或更新一行时,是否也可以只更新那些需要重新计算的行?
你可以这样写:
update your_table
set
cumulative_sum = (select sum(c)
from your_table t2
where
t2.date<your_table.date
or (t2.date=your_table.date
and t2.id<=your_table.id));
子查询计算计数的累积和,即日期为<的所有值的总和;小于当前行的日期,或者其中date =当前行的日期且id为<</p>
你也可以这样写:
where cumulative_sum is null
仅在没有值时更新行。如果表中插入的所有id和日期始终以升序排列,则此操作将有效。
首先按所需的顺序对表进行排序,然后使用下面的查询将其放入#temp
Declare @count int=0
UPdate #temp Set @count = cumulative_sum = count + @count
对date
列使用ORDER BY
函数。
SELECT * FROM yourTableName ORDER BY date