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
Die innere Abfrage zählt die kumulierte Summe und das zusätzliche Feld mark
, was gleich one
ist während die Summe kleiner ist und zu Null wird, wenn sie über 0,9 liegt. Da es einen Schritt später funktioniert, sammelt es die erste Zeile, in der die Summe über dem Limit liegt.
Das Ergebnis der inneren Auswahl
id mark sum
4 1 0.30000001192092896
2 1 0.800000011920929
3 1 1.699999988079071
Jetzt müssen Sie in der äußeren Abfrage nur Zeilen mit mark
auswählen gleich 1. Und es ergibt 4,2,3