sql >> Database >  >> RDS >> Mysql

MySQL Recursive CTE-tabel bestaat niet

De structuur van uw recursieve CTE is uitgeschakeld en de bovenste helft van de unie moet een seed-basecase zijn. Dan zou het recursieve deel een dag moeten optellen bij de vorige inkomende waarde:

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

Let op, we gebruiken TIMESTAMPADD() hier om het probleem van de INTERVAL te omzeilen expressie, die niet echt een variabele kan hebben.

Als u deze aanpak wilt gebruiken om een ​​reeks datums te genereren die overeenkomt met de waarden van en tot in uw tabel, dan kunt u een join proberen:

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

Bij gebruik op deze manier fungeert de recursieve CTE als een kalender tafel.




  1. SQL 'LIKE'-syntaxis

  2. wat is de betere manier om de tekenset voor enorme gegevenstabellen te wijzigen?

  3. MYSQL-query WHERE IN vs OR

  4. T-SQL dynamische spil