【问题标题】:PostgreSQL, select rows until certain amount is reached and exceededPostgreSQL,选择行直到达到并超过一定数量
【发布时间】:2017-05-17 13:37:50
【问题描述】:

我有一张带有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 的所有行,按日期 DESC 排序。那么它将是 3 行:6、5、4,即 4+7+2 = 13。
  2. 我需要获取总共 >= 5、ORDER BY date DESC 的所有行。那么它将是 2 行:6, 5 as 4+7 = 11。
  3. 我需要获取总共 >= 15 的所有行,按日期 DESC 排序。那么它将是 4 行:6、5、4、3,即 4+7+2+4 = 17。

有一个非常相似的问题和解决方案Postgresql select until certain total amount is reached,但我需要一点不同。

感谢您的帮助。

【问题讨论】:

  • 它与链接的问题有什么不同?
  • @vkp 链接的问题采用所有 小于 的行小于给定值,我需要更多行才能超过给定值。

标签: sql database postgresql


【解决方案1】:

只需使用累积和:

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;

【讨论】:

  • 应该是running_amount - amount &lt; 12,当运行量正好等于n行的总和时不包含额外的行。
  • @vkp 是的,你是对的,&lt; 结果不会有多余的行。谢谢你们的帮助,正是我所需要的
猜你喜欢
  • 1970-01-01
  • 2012-05-19
  • 2012-10-21
  • 2023-04-01
  • 2019-03-16
  • 2013-01-08
  • 2021-09-18
  • 1970-01-01
  • 2020-05-31
相关资源
最近更新 更多