更新由两列排序的累积和

时间:2012-12-25 15:21:44

标签: sql sqlite cumulative-sum

鉴于表格:

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

如何更新cumulative_sumdate订购的行的id

结果应为:

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

是否也可以仅更新插入或更新行时需要重新计算的行?

3 个答案:

答案 0 :(得分: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));

子查询计算计数的累积总和,它是日期<&lt;的所有值的总和。比当前行的日期,或者date =当前行的日期,id是&lt;。

你也可以提出这个条件:

where cumulative_sum is null

只有在没有值的情况下才会更新行。如果表中插入的所有ID和日期始终按升序排列,则此方法有效。

答案 1 :(得分:0)

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

Declare @count int=0

UPdate #temp Set @count = cumulative_sum =  count + @count

答案 2 :(得分:-1)

ORDER BY列使用date功能。

SELECT * FROM yourTableName ORDER BY date