Структурата на вашия рекурсивен CTE е изключена и горната половина на съюза трябва да бъде начален базов случай. След това рекурсивната част трябва да добави един ден към предишната входяща стойност:
WITH RECURSIVE cte (n, dt) AS (
SELECT 1, '2019-09-20'
UNION ALL
SELECT n + 1, TIMESTAMPADD(DAY, n, '2019-09-20') FROM cte WHERE n <= 5
)
SELECT * FROM cte;
Трябва да се отбележи, че използваме TIMESTAMPADD()
тук, за да заобиколите проблема с INTERVAL
израз, който всъщност не може да приеме променлива.
Ако искате да използвате този подход, за да генерирате поредица от дати, които съответстват на стойностите от и до във вашата таблица, тогава можете да опитате да се присъедините:
SELECT
t1.dt
FROM cte t1
INNER JOIN yourTable t2
ON t1.dt BETWEEN t2.from_date AND t2.to_date;
Когато се използва по този начин, рекурсивният CTE действа като календар таблица.