select id from
(select id, if(not(@sum > 0.9), 1, 0) mark, (@sum:example@sqldat.com+value) as sum
from trade cross join (select @sum:=0) s
where price=2 order by value asc) t
where mark =1
Вътрешната заявка отчита кумулативната сума и допълнителното поле mark , което е равно на one докато сумата е по-малка и се превръща в нула, когато е над 0,9. Тъй като работи една стъпка по-късно, той събира първия ред, където сумата е над ограничението.
Резултатът от вътрешния избор
id mark sum
4 1 0.30000001192092896
2 1 0.800000011920929
3 1 1.699999988079071
Сега във външната заявка просто трябва да изберете редове с mark равно на 1. И това води до 4,2,3