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 requête interne compte la somme cumulée et le champ supplémentaire mark
, qui est égal à one
tandis que la somme est inférieure et se transforme en zéro lorsqu'elle est supérieure à 0,9. Puisqu'il fonctionne une étape plus tard, il rassemble la première ligne où la somme est supérieure à la limite.
Le résultat de la sélection interne
id mark sum
4 1 0.30000001192092896
2 1 0.800000011920929
3 1 1.699999988079071
Maintenant, dans la requête externe, il vous suffit de sélectionner les lignes avec mark
égal à 1. Et il en résulte 4,2,3