Postgresql选择直到达到某个总量

时间:2012-05-11 10:04:10

标签: sql postgresql select

我想知道我是否可以从以下问题中获得任何帮助。

我有一个交易表(简化如下),我只想选择交易,直到我的总金额达到一定数额。

Transactions

 id |   date   | amount 
----|----------|--------
 1  | 1/1/2012 |   2 
 2  | 2/1/2012 |   3 
 3  | 3/1/2012 |   4
 4  | 4/1/2012 |   20 
 5  | 5/1/2012 |   1 
 6  | 6/1/2012 |   2

现在说我想在桌子上做一个选择,直到总金额为6,即前两行,我该怎么做?

我当时正在考虑与自己和一些总和进行联合,但实际上没有任何进展。如果可能的话,我宁愿不使用任何功能。

最小金额也类似。

非常感谢任何帮助:)

Ť

3 个答案:

答案 0 :(得分:16)

select id, 
       date, 
       amount, 
       running_total
from (
    select id,
           date,
           amount,
           sum(amount) over (order by date asc) as running_total
    from transactions
) t
where running_total <= 6

答案 1 :(得分:1)

select T1.*
from Transactions as T1
where 6 - (select sum(T2.amount) 
               from Transactions as T2 where  T2.id <= T1.id
          ) >= 0
order by id asc

如果Postgres支持像SQL Server这样可以帮助你的子查询

,则此查询适用于SQL Server

答案 2 :(得分:1)

虽然它可能不是最有效的方式(因为你在本质上,首先选择所有内容),但我会考虑使用总计。

类似的东西:

SELECT
  *
FROM
  (
  SELECT
    id
    , date
    , amount
    , (SELECT SUM(amount) FROM Transactions WHERE id <= t.id) AS RunningTotal
  FROM
    Transactions t
) t1
WHERE
  t1.RunningTotal < 6