Способ, который я нашел для этого, требует дополнительной таблицы, в которой будет указано количество месяцев для конечного значения каждого месяца.Предполагается, что он будет применяться для ряда платежей, например, если общее количество предстоящих месяцев относительно невелико, например 12 месяцев.
Эта настройка предназначена только для данных примера:
create table months_pool(
month integer,
mleft integer
);
month
- количество оставшихся месяцев, как указано в таблице событий.mleft
идет от 0 до month - 1
.Он будет использоваться для вычисления даты для каждой записи результирующей таблицы.
insert into months_pool
values
(7,0),(7,1),(7,2),(7,3),(7,4),(7,5),(7,6),
(5,0),(5,1),(5,2),(5,3),(5,4);
Запрос на результат:
select
e.event, ADDDATE(date, interval mp.mleft month) dte,
e.value/e.mleft val,
e.mleft ml
from event e inner join months_pool mp on (e.mleft = mp.month)
order by e.event , ADDDATE(date, interval (mp.mleft) month);
РЕДАКТИРОВАТЬ I
Я вижу@MartinPierce опубликовал ответ в этих строках.Все равно оставлю это из-за использования ADDDATE()
функции.