11

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

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

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 即前 2 行,我该怎么做?

我在想也许可以加入自己和一些总和,但并没有真正到达任何地方。如果可能的话,我宁愿不使用任何功能。

最低金额也有类似的东西。

任何帮助将非常感激 :)

4

3 回答 3

20
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
于 2012-05-11T10:54:42.460 回答
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 是否可以帮助您

于 2012-05-11T10:46:14.857 回答
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
于 2012-05-11T10:57:21.740 回答