假设我有一个这样的表(按id
排序):
id amount
--- ---
1 10
2 15
3 10
4 30
我想要一个返回行的查询,使得amount
的总和大于给定的数字。因此(在不存在的语法中)SELECT id, amount LIMIT BY running_total(amount) 20
选择前2行,... LIMIT BY running_total(amount) 60
选择所有行。我无法更改架构以保持预先计算的运行总计。这可以合理有效地完成吗?如果答案仅适用于SQLite,那将是可以接受的。
答案 0 :(得分:1)
您可以使用子查询对所有具有较低ID的行进行求和:
select *
from YourTable t1
where 20 > coalesce(
(
select sum(amount)
from YourTable t2
where t2.id < t1.id
), 0)
coalesce是捕获第一行,其总和为null
。