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
Vnitřní dotaz počítá kumulativní součet a další pole mark
, což je rovno one
zatímco součet je menší a změní se na nulu, když je větší než 0,9. Protože funguje o krok později, shromažďuje první řádek, kde je součet nad limitem.
Výsledek vnitřního výběru
id mark sum
4 1 0.30000001192092896
2 1 0.800000011920929
3 1 1.699999988079071
Nyní ve vnějším dotazu stačí vybrat řádky pomocí mark
rovná se 1. A výsledkem je 4,2,3