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 consulta interna cuenta la suma acumulativa y el campo adicional mark
, que es igual a one
mientras que la suma es menor y se convierte en cero cuando está por encima de 0,9. Como está funcionando un paso más tarde, reúne la primera fila donde la suma está por encima del límite.
El resultado de la selección interna
id mark sum
4 1 0.30000001192092896
2 1 0.800000011920929
3 1 1.699999988079071
Ahora, en la consulta externa, solo necesita seleccionar filas con mark
igual a 1. Y da como resultado 4,2,3