Jeg tror, at dette vil give dig, hvad du ønsker, med uanset et rullende datointerval, du er bekymret for... Jeg har testet ved at oprette min egen "faktura"-tabel med de to kolonner identificeret. Det var faktisk ret simpelt med brugen af @ mySQL-variabler, der kan bruges inline i forespørgslen... Det eneste er, at der nu er en sand måde at vide, hvad en "åbnings"-balance er, så jeg har indstillet initialen startværdien nul, og juster derefter fra det.
Kickeren er "PreAgg"-forespørgslen til blot at aggregere efter selve datoen for ind/ud. Så, ved at bestille dette resultat i datorækkefølge, starter @ sql-variablen.
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
Men selvom jeg har givet et 3 måneders vindue (-2 måneder, +1 måned), synes jeg ikke det giver rigtig mening, da de fremtidige opslag ikke vil være sket endnu... hvad der kan være vigtigere er at bare have
where
i.postdate > date_sub( now(), interval 3 month )
som vil få de sidste 3 måneder fra nuværende dato/tidspunkt.