Вот мое мнение.По сути, вы присоединяетесь к таблице счетов на
todaydata.due_date=DATE_ADD(yesterdaydata.due_date,DAY,-1)
, поэтому у вас есть доступ к вчерашнему полю amount_due (я сделал левое соединение, так что если вы попросите первый день в вашей таблице, вы все равно получитезапись назад)
Остальное довольно просто.Я не был уверен, было ли сегодняшнее конечное сальдо суммой вчерашнего + притока + оттока или просто суммой todaydata.amount_due, поэтому я включил оба.
SELECT
todaydata.due_date,
SUM(case when yesterdaydata.amount_due is null then 0 else yesterdaydata.amount_due end )) AS StartingBalance,
SUM(CASE when todaydata.amount > 0 THEN todaydata.amount ELSE 0 END) AS INFLOW,
SUM(CASE when todaydata.amount < 0 THEN todaydata.amount ELSE 0 END) AS OUTFLOW,
SUM(yesterday.amount_due) AS StartingBalance +
SUM(CASE where todaydata.amount > 0 THEN todaydata.amount ELSE 0 END) +
SUM(CASE where todaydata.amount < 0 THEN todaydata.amount ELSE 0 END) AS CalculatedEndingBalance,
SUM(todaydata.amount_due) AS OtherEndingBalance
FROM invoice [todaydata]
LEFT JOIN invoice [yesterdaydata] ON todaydata.due_date=DATE_ADD(yesterdaydata.due_date,DAY,-1)
GROUP BY todaydata.due_date
У меня не было возможности проверить это на базе данных MySQL, поэтому дайте мне знать о любых синтаксических ошибках, и я исправлю.