如何使用postgres窗口函数计算会计软件中的余额

时间:2014-08-04 01:36:41

标签: sql database postgresql window-functions accounting

我的问题与此相同,但我使用的是Postgres。

Calculate balance with mysql

有一个包含以下数据的表:

ID      In       Out 
1      100.00    0.00   
2       10.00    0.00   
3        0.00   70.00    
4        5.00    0.00    
5        0.00   60.00   
6       20.00    0.00     

现在我需要一个查询,它给出了以下结果:

ID      In       Out    Balance
1      100.00    0.00   100.00
2       10.00    0.00   110.00
3        0.00   70.00    40.00
4        5.00    0.00    45.00
5        0.00   60.00   -15.00
6       20.00    0.00     5.00

如何最好地处理"平衡"计算。我被告知postgres中有窗口函数,如何使用postgres窗口函数完成?

感谢。

1 个答案:

答案 0 :(得分:5)

select t.*, sum("In"-"Out") over(order by id) as balance
from tbl t
order by id

小提琴: http://sqlfiddle.com/#!15/97dc5/2/0

考虑更改列名称" In" /" Out"所以你不需要把它们放在引号中。 (它们是保留字)

如果您只想要一个客户(customer_id = 2):

select t.*, sum("In"-"Out") over(order by id) as balance
from tbl t
where customer_id = 2
order by id

如果您的查询涉及多个客户,并且您希望与每个客户重新启动运行余额,则可以使用:

select t.*, sum("In"-"Out") over( partition by customer_id
                                  order by customer_id, id ) as balance_by_cust
from tbl t
order by customer_id, id