Myslím, že tím získáte to, co chcete, bez ohledu na pohyblivé časové období, které vás zajímá... Testoval jsem vytvořením vlastní tabulky „faktury“ se dvěma identifikovanými sloupci. Ve skutečnosti to bylo docela jednoduché s využitím proměnných @ mySQL, které lze v dotazu použít inline... Jediná věc je, že nyní existuje skutečný způsob, jak zjistit, co je "počáteční" zůstatek, takže jsem nastavil počáteční spouštěcí hodnotu nula a poté ji upravte.
Nakopávačem je dotaz „PreAgg“, který se pouze agreguje podle samotného data vstupu/odchodu. Poté, když tento výsledek seřadíte v pořadí podle data, spustí se proměnná @ 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
Nicméně, i když jsem dal 3 měsíční okno (-2 měsíce, +1 měsíc), nemyslím si, že to opravdu dává smysl, protože k budoucím příspěvkům ještě nedojde... co může být důležitější, je stačí mít
where
i.postdate > date_sub( now(), interval 3 month )
který získá poslední 3 měsíce od aktuálního data/času.