Jest to bolesne w MySQL z kilku powodów. Po pierwsze, MySQL nie ma zbyt dobrego wsparcia dla sum skumulowanych, które chcesz porównać.
Po drugie, twój zestaw wyników jest trochę słaby. Bardziej sensowne jest pokazanie wszystkich ins
rekordy, które przyczyniają się do każdego outs
nagrywaj, a nie tylko jeden z nich.
W tym celu możesz użyć sprzężenia na sumach skumulowanych, które wygląda tak:
select o.*, (o.to_quantity - o.quantity) as from_quantity,
i.*
from (select o.*,
(select sum(o2.quantity)
from outs o2
where o2.id <= o.id
) as to_quantity
from outs o
) o join
(select i.*,
(select sum(i2.quantity)
from ins i2
where i2.id <= i.id
) as to_quantity
from ins i
) i
on (o.to_quantity - o.quantity) < i.to_quantity and
o.to_quantity > (i.to_quantity - i.quantity)
Tutaj jest SQL Fiddle.