Как заполнить таблицу интервалом дат?
Есть таблица формата
id | Минимум | Максимум |
---|---|---|
01 | 01.01.2000 | 03.03.2000 |
02 | 02.02.2001 | 11.05.2001 |
Необходимо сделать таблицу со списком дат с шагом в месяц для каждого id от минимального к максимальному. И чтобы даты были последним днём месяца. По типу:
id | Дата |
---|---|
01 | 31.01.2000 |
01 | 28.02.2000 |
01 | 31.03.2000 |
02 | 28.02.2001 |
02 | 31.03.2001 |
02 | 30.04.2001 |
02 | 31.05.2001 |
что-то по типу цикла: для каждого id добавить дату с шагом 1 месяц, пока дата меньше, чем максимум
мой неработающий код:
WITH t AS(
select id, EOMONTH(Минимум) AS min_v, Минимум, Максимум
from my_table
UNION ALL
SELECT id, EOMONTH(DATEADD(m, 1, d)), Минимум, Максимум
FROM t
WHERE EOMONTH(Минимум) <= Максимум)
пишет ошибку "adding a value to a 'date' column caused an overflow"
Источник: Stack Overflow на русском