Мисля, че това ще ви даде това, което искате, с подвижен период от време, който ви интересува... Тествах, като създадох моя собствена таблица с "фактури" с двете идентифицирани колони. Всъщност беше доста просто с използването на @ mySQL променливи, които могат да се използват вградени в заявката... Единственото нещо е, че сега има верен начин да разберете какво е "откриващо" салдо, така че зададох първоначалното начална стойност е нула, след което коригирайте от това.
Кикерът е заявката "PreAgg", която просто се обобщава по самата дата на влизане/излизане. След това, като подредите резултата по дати, променливата @ sql се задейства.
select
PreAgg.PostDate,
@PrevBal as BegBal,
PreAgg.OutFlows,
PreAgg.InFlows,
@PrevBal := @PrevBal + PreAgg.OutFlows + PreAgg.InFlows as EndBal
from
( select
i.postdate,
sum( if( i.amount < 0, i.amount, 0 ) ) as OutFlows,
sum( if( i.amount > 0, i.amount, 0 ) ) as InFlows
from
invoice i
where
i.postdate between date_sub( now(), interval 2 month )
and date_add( now(), interval 1 month )
group by
i.postdate
order by
i.postdate ) as PreAgg,
( select @PrevBal := 0.00 ) as SqlVars
Въпреки това, въпреки че съм дал период от 3 месеца (-2 месеца, +1 месец), не мисля, че наистина има смисъл, тъй като бъдещите публикации все още няма да са се случили... това, което може да е по-важно е да просто имайте
where
i.postdate > date_sub( now(), interval 3 month )
който ще получи последните 3 месеца от текущата дата/час.