我想知道我是否可以从以下问题中获得任何帮助。
我有一个交易表(简化如下),我只想选择交易,直到我的总金额达到一定数额。
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,即前两行,我该怎么做?
我当时正在考虑与自己和一些总和进行联合,但实际上没有任何进展。如果可能的话,我宁愿不使用任何功能。
最小金额也类似。
非常感谢任何帮助:)
Ť
答案 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