Postgresql 在递减余额上返回值



我有一个查询,它返回一个人支付的项目,该项目的价格和余额。我的问题是,在某些情况下,一个人可能会为一件物品支付 2 次付款(付款,稍后再支付余额(。所以返回的表看起来像这样:

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如此(5400 + 2700 = 8100 ),因此余额应该0。所以我的问题是我如何为每件物品的后续付款返回适当的余额?

目前,我将balance作为(price - paid)退回,但对于后续付款,余额不正确。

你想要一个窗口函数。

price - 
sum(paid) over (partition by item_id order by pay_id desc)
as balance.

您可能希望采用不同的顺序,使用报表使用的任何顺序。

相关内容

  • 没有找到相关文章

最新更新