Strukturen af din rekursive CTE er slået fra, og den øverste halvdel af foreningen bør være et frøbasetilfælde. Derefter skal den rekursive del tilføje en dag til den tidligere indgående værdi:
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;
Bemærk at vi bruger TIMESTAMPADD()
her for at omgå problemet med INTERVAL
udtryk, som ikke rigtig kan tage en variabel.
Hvis du vil bruge denne tilgang til at generere en række datoer, der matcher fra- og til-værdierne i din tabel, så kan du prøve at deltage:
SELECT
t1.dt
FROM cte t1
INNER JOIN yourTable t2
ON t1.dt BETWEEN t2.from_date AND t2.to_date;
Når den bruges på denne måde, fungerer den rekursive CTE som en kalender tabel.