A partire dalla versione 8.0 in MySQL sono state implementate le CTE (Common Tables Expressions). Queste espressioni sono utilizzabili anche in modalità ricorsiva ed è in questo modo che possiamo generare l'elenco di date in un intervallo definito.
Esempio: generare tutte le date tra il 1 Gennaio 2019 ed il 31 Gennario 2019 (estremi inclusi).
QUERY
WITH RECURSIVE date_range(d) AS (
SELECT '2019-01-01' AS giorno
UNION ALL
SELECT date_add(d, interval 1 day) AS giorno
FROM date_range
WHERE d<'2019-01-31'
)
SELECT *
FROM date_range
RISULTATO
2019-01-01
2019-01-02
...
2019-01-30
2019-01-31