2

给定表格:

id   date count cumulative_sum
1    2    100                  
2    1    50
3    1    10
4    2    5

如何更新按,cumulative_sum排序的行?dateid

结果应该是:

id   date count cumulative_sum
2    1    50    50
3    1    10    60
1    2    100   160
4    2    5     165

是否也可以只更新那些在我插入或更新行时需要重新计算的行?

4

3 回答 3

1

你可以使用这个:

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));

子查询统计count的累计总和,即日期<<当前行日期,或者日期=当前行日期且id为<的所有值的总和。

你也可以把这个条件:

where cumulative_sum is null

仅当还没有值时才更新行。如果插入到表中的所有 id 和日期始终按升序排列,这将起作用。

于 2012-12-25T15:58:35.163 回答
0

首先按所需顺序对表进行排序,然后使用下面的查询将其放入#temp

Declare @count int=0

UPdate #temp Set @count = cumulative_sum =  count + @count
于 2017-01-20T13:29:18.227 回答
-1

使用列ORDER BY的功能date

SELECT * FROM yourTableName ORDER BY date

于 2012-12-25T15:29:01.047 回答