这个概念是找到 sum(fCurrAmt)
可能高于输入的金额但不应低于输入的金额的行。我不知道如何详细解释这个标准。
假设我有一个表演示
场景:1
id fCurrAmt price
------------------
1 1 10
2 1 20
3 2 25
4 3 30
如果输入的金额是3,我需要返回前3行
id fCurrAmt price
------------------
1 1 10
2 1 20
3 2 25
在上述情况下,sum(fCurrAmt) 为 4,高于输入的金额。
场景:2
id fCurrAmt price
------------------
1 1 10
2 1 20
如果输入的数量是3,我需要返回没有记录。
在上述情况下,sum(fCurrAmt) 为 2,低于输入的金额。
我在场景 1 中尝试了以下代码
SELECT a.id,a.price,a.total,a.fCurrAmt from (
select b.id,b.price,b.fCurrAmt,(
select sum(fCurrAmt) from demo c where c.id <= b.id order by c.id
) as total from demo b
) a where a.total <= 3
它只返回前 2 条记录
最佳答案
试试这个 您需要使用子查询
和min
以及group by
。使用子查询
,我们可以返回最小的id
,其中sum
满足给定的数字,然后加入id
到检索直到 id 的完整行
SELECT *
FROM test t
INNER JOIN(
SELECT MIN(id) valId
FROM (
SELECT t.id,
(SELECT SUM(t1.fCurrAmt)
FROM test t1
WHERE t1.id <= t.id) AS Rowsum
FROM test t) t2
WHERE Rowsum >= 3) t1 ON t1.valId >= t.id;
SQL fiddle http://www.sqlfiddle.com/#!9/a1d07/13
关于mysql - 如何返回 sum(field) <= value 的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51059171/