select id from
(select id, if(not(@sum > 0.9), 1, 0) mark, (@sum:example@sqldat.com+value) as sum
from trade cross join (select @sum:=0) s
where price=2 order by value asc) t
where mark =1
Den inre frågan räknar kumulativ summa och tilläggsfält mark , vilket är lika med one medan summan är mindre och förvandlas till noll när den är över 0,9. Eftersom det fungerar ett steg senare, samlar det den första raden där summan är över gränsen.
Resultatet av det inre urvalet
id mark sum
4 1 0.30000001192092896
2 1 0.800000011920929
3 1 1.699999988079071
Nu i den yttre frågan behöver du bara välja rader med mark lika med 1. Och det resulterar i 4,2,3