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 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