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
A consulta interna conta a soma cumulativa e o campo adicional
mark
, que é igual a one
enquanto soma é menor e se transforma em zero quando é superior a 0,9. Como está funcionando um passo depois, ele reúne a primeira linha em que a soma está acima do limite. O resultado da seleção interna
id mark sum
4 1 0.30000001192092896
2 1 0.800000011920929
3 1 1.699999988079071
Agora, na consulta externa, você só precisa selecionar linhas com
mark
igual a 1. E resulta em 4,2,3
demonstração no sqlfiddle