我有一个查询,返回一个人已经支付的项目,该项目的价格和余额。我的问题是,在某些情况下,一个人可以为一个项目支付两笔款项(支付一笔款项,然后另一笔支付余额)。因此返回的表如下所示:
name | invoice_id| inv_date | item_id|item | pay_id | price | paid | balance |
---------|-----------|----------|--------|---------|--------|-------|------|---------|
John Doe| 581 | 2018-4-10| 10 |Transport| 1165 | 8100 | 5400 | 2700 |
John Doe| 581 | 2018-4-10| 10 |Transport| 1030 | 8100 | 2700 | 5400 |
John Doe| 581 | 2018-4-10| 25 |Insurance| 1165 | 24000 | 12000| 12000 |
John Doe| 581 | 2018-4-10| 25 |Insurance| 1030 | 24000 | 12000| 12000 |
---------|-----------|----------|--------|---------| -------|-------|------|---------|从返回结果可以看出,每秒钟支付的余额是不正确的。以运输的第二次付款为例,以前的5400付款是2700,现在的付款是2700,所以(5400 + 2700 = 8100 )的余额应该是0。因此,我的问题是,我如何才能返回适当的余额,每次后续支付的每一项?
目前,我将balance返回为(price - paid),但是对于以后的支付,余额是不正确的。
发布于 2018-07-09 06:36:58
你想要一个窗口功能。
price -
sum(paid) over (partition by item_id order by pay_id desc)
as balance.您可能想要一个不同的顺序,使用任何排序您的报告使用。
https://stackoverflow.com/questions/51239321
复制相似问题