Axi*_*xil 1 sql database postgresql accounting window-functions
我遇到了同样的问题,但我正在使用Postgres.
有一个包含以下数据的表:
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
Run Code Online (Sandbox Code Playgroud)
现在我需要一个查询,它给出了以下结果:
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
Run Code Online (Sandbox Code Playgroud)
如何最好地处理"平衡"计算.我被告知postgres中有窗口函数,如何使用postgres窗口函数完成?
谢谢.
select t.*, sum("In"-"Out") over(order by id) as balance
from tbl t
order by id
Run Code Online (Sandbox Code Playgroud)
小提琴: 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
Run Code Online (Sandbox Code Playgroud)
如果您的查询要跨越多个客户,并且您希望与每个客户重新启动运行余额,则可以使用:
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
Run Code Online (Sandbox Code Playgroud)