select id from
(select id, if(not(@sum > 0.9), 1, 0) mark, (@sum:[email protected]+value) as sum
from trade cross join (select @sum:=0) s
where price=2 order by value asc) t
where mark =1
De binnenste query telt de cumulatieve som en het extra veld mark
, wat gelijk is aan one
terwijl de som kleiner is en nul wordt als deze hoger is dan 0,9. Omdat het een stap later werkt, verzamelt het de eerste rij waar de som boven de limiet ligt.
Het resultaat van de innerlijke selectie
id mark sum
4 1 0.30000001192092896
2 1 0.800000011920929
3 1 1.699999988079071
Nu hoef je in de buitenste query alleen maar rijen te selecteren met mark
gelijk aan 1. En het resulteert in 4,2,3