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
Den indre forespørgsel tæller kumulativ sum og yderligere felt mark
, som er lig med one
mens sum er mindre og bliver til nul, når den er over 0,9. Da den arbejder et trin senere, samler den den første række, hvor summen er over grænsen.
Resultatet af det indre udvalg
id mark sum
4 1 0.30000001192092896
2 1 0.800000011920929
3 1 1.699999988079071
Nu skal du i den ydre forespørgsel blot vælge rækker med mark
lig med 1. Og det resulterer i 4,2,3