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

ale*_*x23 3 sql database postgresql

我有一个包含iddate和 的表amount,我需要获取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
Run Code Online (Sandbox Code Playgroud)

例如

  1. 我需要获取总共 >= 12 的所有行,按日期 DESC 排序。那么它将是 3 行:6、5、4,即 4+7+2 = 13。
  2. 我需要获取总共 >= 5 的所有行,按日期 DESC 排序。那么它将是 2 行:6、5,即 4+7 = 11。
  3. 我需要获取总共 >= 15 的所有行,按日期 DESC 排序。那么它将是 4 行:6,5,4,3,即 4+7+2+4 = 17。

有一个非常相似的问题和解决方案Postgresql select直到达到一定的总量,但我需要有点不同。

谢谢你的帮助。

Gor*_*off 6

只需使用累积和:

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;
Run Code Online (Sandbox Code Playgroud)