【问题标题】:Postgresql return values on a reducing balancePostgresql 返回值减少余额
【发布时间】:2018-12-16 18:29:05
【问题描述】:

我有一个查询,它返回某人已支付的物品、该物品的价格和余额。我的问题是在某些情况下,一个人可能会为一件物品支付 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) 返回,但对于后续付款,余额不正确。

【问题讨论】:

    标签: postgresql join outer-join math-functions


    【解决方案1】:

    你想要一个窗口函数。

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

    您可能想要不同的顺序,使用您的报告使用的任何顺序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-16
      • 2016-11-27
      • 1970-01-01
      • 2014-08-28
      • 1970-01-01
      • 2021-08-16
      • 2022-10-13
      • 1970-01-01
      相关资源
      最近更新 更多