sql >> Databasteknik >  >> RDS >> Mysql

MySQL Rekursiv CTE-tabell finns inte

Strukturen för din rekursiva CTE är avstängd, och den övre halvan av föreningen bör vara ett fröbasfall. Sedan bör den rekursiva delen lägga till en dag till det tidigare inkommande värdet:

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

Observera att vi använder TIMESTAMPADD() här för att komma runt problemet med INTERVAL uttryck, som inte riktigt kan ta en variabel.

Om du vill använda det här tillvägagångssättet för att generera en serie datum som matchar värdena från och till i din tabell, kan du prova att gå med:

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

När den används på detta sätt fungerar den rekursiva CTE som en kalender bord.




  1. Få mysql_fetch_assoc att automatiskt upptäcka returdatatyper?

  2. Genererar en MySQL timuppdelning från aktuell tidsstämpel

  3. Dynamisk pivottabell i SQL Server

  4. SQL Server konverterar sträng till datum och tid