sql >> Database teknologi >  >> RDS >> Mysql

MySQL Rekursiv CTE-tabel eksisterer ikke

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;

Demo

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.




  1. Opret et indsæt... Vælg sætning i Laravel

  2. PostgreSQL CSV import fra kommandolinjen

  3. Advarsel:#1265 Data afkortet for kolonne 'pdd' i række 1

  4. KeyCloak User Federation OG DYNAMISKE ROLLER