Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Selecione a contagem mínima de linhas com soma total maior ou igual a um determinado limite

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