У меня есть база данных, где записи не хранятся каждый день. Однако мне нужно рассчитать изменение баланса между датами, где есть записи (без учета дат, когда нет записей).Показать предыдущую дату из неполного списка дат в MySQL
Например, я хотел бы результат, который выглядит следующим образом:
business_date balance prev_date prev_balance diff
2014-01-16 -2648 2014-01-13 436 -3084
2014-02-04 37 2014-01-16 -2648 2685
2014-02-11 37 2014-02-04 37 0
2014-02-12 37 2014-02-11 37 0
2014-02-21 -9633 2014-02-12 37 -9670
2014-03-03 396 2014-02-21 -9633 10029
2014-04-02 -10252 2014-03-03 396 -10648
2014-04-03 -7033 2014-04-02 -10252 3219
2014-05-21 -6849 2014-04-03 -7033 184
К сожалению, я не знаю, интервал между текущими и предыдущими датами, так как она всегда разная. Поэтому я не могу использовать что-то вроде DATE_SUB.
Это то, что я пробовал:
select * from
(select business_date, balance
from table1
order by business_date) d
LEFT JOIN
(select business_date as prev_date,balance as prev_balance
from table2
order by business_date) a
on a.prev_date > d.business_date
Но это возвращает только кучу нулей для столбцов пред.
Все, что я читал по этому вопросу, похоже, связано с созданием таблицы всех дат, но это не сработает для меня, так как мой список дат должен быть неполным, я хочу включить только даты, для которых мы имеют записи.
Любые предложения о том, как подойти к этому, будут очень полезны, спасибо.
Кажется, что это сработает. Однако я не знаю, как создавать номера строк в MySQL (я всегда думал, что MySQL не делает номера строк?). Все, что я искал для создания чисел строк в MySQL, похоже, использует переменные, с которыми я не знаком (может быть, сегодня это день, чтобы узнать?) Кроме того, моя первая таблица - таблица d, вторая таблица - таблица a, поэтому ваш ответ немного запутан. – Hopper06
Да, использование переменных - способ генерации чисел строк в mysql. –
Это показывает вам, как: http://stackoverflow.com/questions/3126972 –