如何使用前一行的累积添加进行插入?

时间:2013-03-28 11:07:23

标签: sql postgresql

在下表中

----------------------------
|  id  |    day   | count  |
----------------------------
    1   2013-01-01    10
    1   2013-01-05    20
    1   2013-01-08    45

第二行和第三行计数列是累积的,即20 =(第一行10次+ 10次额外计数)和45次(第二行20次+ 25次额外计数)。如何在Postgresql中使用累积添加插入第二行和第三行(以及进一步)?

注意:从程序中的变量读取附加计数。因此,目的是将此值存储在Postgresql的“count”列中,但也将其添加为最后一个条目按升序日期顺序找到的“count”。

2 个答案:

答案 0 :(得分:1)

由于您没有说附加计数来自哪里,我假设有一个附加计数列:

select *,
    sum(additional_count) over(order by "day")  "count"
from t
order by "day"

作为窗口函数的sum函数执行总计。它使用over子句时是一个窗口函数。

答案 1 :(得分:0)

如果问题是带有select的insert语句如何:

insert into x(id, day, count) 
select 1, current_timestamp, 
coalesce((select max(count) from x), 0) + 10;

但这不一定是解决问题的最佳方法。