我在postgres中遇到了一个和这个计算余额相同的问题,但是在join表中。
我有一张table
ID amount deduct_id created_time
1 100.00 1 2020-01-01 15:30:20
2 10.00 1 2020-01-01 15:32:20
3 30.00 1 2020-01-01 15:43:20
4 5.00 1 2020-02-02 08:30:20
5 10.00 2 2020-02-02 23:30:20
6 20.00 2 2020-02-03 10:30:20
表b和
deduct_id amount created_time
1 100.00 2020-02-02 10:00:20
2 15.00 2020-02-03 10:00:20
现在我需要一个查询,它会给出以下结果:
ID amount deduct Balance created_time
1 100.00 0.00 100.00 2020-01-01 15:30:20
2 10.00 0.00 110.00 2020-01-01 15:32:20
3 30.00 0.00 140.00 2020-01-01 15:43:20
4 5.00 0.00 145.00 2020-02-02 08:30:20
null 0.00 100.00 45.00 2020-02-02 10:00:20
5 10.00 0.00 55.00 2020-02-02 23:30:20
null 0.00 15.00 40.00 2020-02-03 10:00:20
6 20.00 0.00 60.00 2020-02-03 10:30:20
我用的是Postgres9.6
扣减标识是指数据是否是该日期扣减的一部分。
创建时间是指时间线。
【更新】如何实现按月过滤?
ID amount deduct Balance created_time
1 100.00 0.00 100.00 2020-01-01 15:30:20
2 10.00 0.00 110.00 2020-01-01 15:32:20
3 30.00 0.00 140.00 2020-01-01 15:43:20
ID amount deduct Balance created_time
4 5.00 0.00 145.00 2020-02-02 08:30:20
null 0.00 100.00 45.00 2020-02-02 10:00:20
5 10.00 0.00 55.00 2020-02-02 23:30:20
null 0.00 15.00 40.00 2020-02-03 10:00:20
6 20.00 0.00 60.00 2020-02-03 10:30:20
我知道这是一个糟糕的设计表,但有可能达到这样的结果吗?怎么做?
谢谢你的帮助。
1条答案
按热度按时间yhxst69z1#
我想那是
union all
还有一扇Windowssum()
:我不清楚是哪个栏目
deduct_id
应该是用来做的。从查询结果来看,您似乎不想使用它来定义分区,这与我的想法相反—所以我只是从查询中删除了if。