PostgreSQL,选择行直到达到并超过一定数量

时间:2017-05-17 13:37:50

标签: sql database postgresql

我有一张包含iddateamount的表格,我需要获取id的列表,按日期DESC排序,总计大于或等于某个特定值。

 id |   date   | amount 
----|----------|--------
 1  | 1/1/2017 |   3 
 2  | 2/1/2017 |   5 
 3  | 3/1/2017 |   4
 4  | 4/1/2017 |   2 
 5  | 5/1/2017 |   7 
 6  | 6/1/2017 |   4

例如

  1. 我需要获得总计将>> = 12,ORDER BY日期DESC的所有行。然后它将是3行:6,5,4,4 + 7 + 2 = 13.
  2. 我需要获得总计将>> = 5,ORDER BY日期DESC的所有行。然后它将成为2行:6,5作为4 + 7 = 11.
  3. 我需要获得总计将>> = 15,ORDER BY日期DESC的所有行。那么它将是4行:6,5,4,3为4 + 7 + 2 + 4 = 17。
  4. 有一个非常相似的问题和解决方案Postgresql select until certain total amount is reached,但我需要一点点不同。

    感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

只需使用累计金额:

select t.*
from (select t.*, sum(amount) over (order by date desc) as running_amount
      from t
     ) t
where running_amount - amount < 12
order by date desc;