我想通过考虑一些额外条件在表格中进行顺序求和。 我们需要确保当顺序求和时,如果一个id为+40,则下一个和为130,如果下一个为+1,则和仍为130,现在如果下一个为-1,则总和必须为129。 第一次需要将100加到总和上,然后根据条件只增加计数。 我们甚至需要限制总和的最小值,使其不小于70
我已经尝试过下面的查询,但是它似乎没有考虑先前的值。
我尝试过的示例:
create table tableA (id int not null, count int not null);
insert into tableA(id, count) values(1,11), (2,21),(3, -3); -- case 1
insert into tableA(id, count) values(1,35), (2,-3); -- case 2
insert into tableA(id, count) values(1,-45),(2,67); -- case3
尝试查询:
select t.id, t.count,
case when (100+(select ifnull(sum(count),0) from tableA x where x.id <= t.id)) >= 130 then 130
when (100+(select ifnull(sum(count),0) from tableA x where x.id <= t.id)) <= 70 then 70
else (100+(select ifnull(sum(count),0) from tableA x where x.id <= t.id))
end as xxxx
from tableA t;
我希望我的输出看起来像:
案例1结果:
id count Sum
1 11 111
2 21 130
3 -4 126
案例2结果:
id count Sum
1 35 130
2 -3 127
Case3结果:
id count Sum
1 -45 70
2 67 137
答案 0 :(得分:1)
这回答了问题的原始版本。
我认为这可以满足您的要求
select a.*, (@sum := least(@sum + count, 130)) as "sum"
from (select a.*
from tablea a
order by a.id
) a cross join
(select @sum := 0) params;
我不知道100的来源。这不是您的解释的一部分。
Here是db <>小提琴,它说明了以30为极限(这似乎是您的意图)如何工作的。