これであなたが望むものが得られると思いますが、あなたが懸念しているローリング日付範囲...私は2つの列が識別された独自の「請求書」テーブルを作成してテストしました。クエリでインラインで使用できる@mySQL変数を利用することで、実際には非常に簡単でした...唯一のことは、「開始」バランスが何であるかを知る本当の方法があるので、最初のゼロの起動値を次に調整します。
キッカーは、in/outの日付自体で集計する「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か月を取得します。