Я думаю, что это даст вам то, что вы хотите с любым изменяющимся диапазоном дат, который вас интересует ... Я проверил, создав свою собственную таблицу "счетов-фактур" с двумя указанными столбцами.На самом деле все было довольно просто с использованием переменных @ 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 месяца с текущей даты / времени.