Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL Recursive CTE-Tabelle existiert nicht

Die Struktur Ihres rekursiven CTE ist deaktiviert, und die obere Hälfte der Union sollte ein Seed-Basisfall sein. Dann sollte der rekursive Teil einen Tag zum vorherigen eingehenden Wert hinzufügen:

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;

Demo

Beachten Sie, dass wir TIMESTAMPADD() verwenden hier, um das Problem des INTERVAL zu umgehen Ausdruck, der eigentlich keine Variable annehmen kann.

Wenn Sie diesen Ansatz verwenden möchten, um eine Reihe von Daten zu generieren, die mit den Werten von und bis in Ihrer Tabelle übereinstimmen, können Sie einen Join versuchen:

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

Bei dieser Verwendung fungiert der rekursive CTE als Kalender Tabelle.