Postgresql return 余额递减的值
Postgresql return values on a reducing balance
我想查询一个人已支付的 returns 件商品,该件商品的价格和余额。我的问题是,在某些情况下,一个人可能会为一件商品支付两次(先支付,然后再支付余额)。所以 returned table 看起来像这样:
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 |
---------|-----------|----------|--------|---------| -------|-------|------|---------|
正如您从 return 结果中看到的那样,每次付款的余额都不正确。以第二笔交通费为例,上一笔支付5400
,本次支付2700
所以(5400 + 2700 = 8100 )
所以余额应该是0
。所以我的问题是我如何才能 return 每个项目的每个后续付款的适当余额?
目前我return将 balance
设为 (price - paid)
,但对于后续付款,余额不正确。
你想要一个 window 函数。
price -
sum(paid) over (partition by item_id order by pay_id desc)
as balance.
您可能需要不同的顺序,请使用您的报告使用的任何顺序。
我想查询一个人已支付的 returns 件商品,该件商品的价格和余额。我的问题是,在某些情况下,一个人可能会为一件商品支付两次(先支付,然后再支付余额)。所以 returned table 看起来像这样:
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 |
---------|-----------|----------|--------|---------| -------|-------|------|---------|
正如您从 return 结果中看到的那样,每次付款的余额都不正确。以第二笔交通费为例,上一笔支付5400
,本次支付2700
所以(5400 + 2700 = 8100 )
所以余额应该是0
。所以我的问题是我如何才能 return 每个项目的每个后续付款的适当余额?
目前我return将 balance
设为 (price - paid)
,但对于后续付款,余额不正确。
你想要一个 window 函数。
price -
sum(paid) over (partition by item_id order by pay_id desc)
as balance.
您可能需要不同的顺序,请使用您的报告使用的任何顺序。