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
La query interna conta la somma cumulativa e il campo aggiuntivo mark
, che è uguale a one
mentre sum è minore e diventa zero quando è superiore a 0,9. Poiché funziona un passaggio dopo, raccoglie la prima riga in cui la somma è superiore al limite.
Il risultato della selezione interna
id mark sum
4 1 0.30000001192092896
2 1 0.800000011920929
3 1 1.699999988079071
Ora nella query esterna devi solo selezionare le righe con mark
uguale a 1. E risulta in 4,2,3