Creo que esto le dará lo que quiere, sin embargo, con un rango de fechas móviles que le preocupan ... Lo probé creando mi propia tabla de "facturas" con las dos columnas identificadas. En realidad, fue bastante simple con la utilización de variables @ mySQL que se pueden usar en línea en la consulta... Lo único es que ahora hay una forma real de saber qué es un saldo de "apertura", así que configuré el saldo inicial valor inicial de cero y luego ajustar a partir de eso.
El truco es la consulta "PreAgg" para agregar simplemente por la fecha de entrada/salida. Luego, al ordenar ese resultado por orden de fecha, se activa la variable @ 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
Sin embargo, a pesar de que he dado una ventana de 3 meses (-2 meses, +1 mes), no creo que realmente tenga sentido ya que las publicaciones futuras aún no habrán sucedido... lo que puede ser más importante es solo tienes
where
i.postdate > date_sub( now(), interval 3 month )
que obtendrá los últimos 3 meses a partir de la fecha/hora actual.