Mysql
 sql >> Base de données >  >> RDS >> Mysql

La table CTE récursive MySQL n'existe pas

La structure de votre CTE récursif est désactivée et la moitié supérieure de l'union doit être un cas de base de départ. Ensuite, la partie récursive doit ajouter un jour à la valeur entrante précédente :

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;

Démo

À noter, nous utilisons TIMESTAMPADD() ici pour contourner le problème de l'INTERVAL expression, qui ne peut pas vraiment prendre une variable.

Si vous souhaitez utiliser cette approche pour générer une série de dates qui correspondent aux valeurs de et à dans votre table, vous pouvez essayer une jointure :

SELECT
    t1.dt
FROM cte t1
INNER JOIN yourTable t2
    ON t1.dt BETWEEN t2.from_date AND t2.to_date;

Lorsqu'il est utilisé de cette façon, le CTE récursif agit comme un calendrier tableau.