Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Rekursywna tabela CTE MySQL nie istnieje

Struktura twojego rekurencyjnego CTE jest wyłączona, a górna połowa unii powinna być przypadkiem bazowym nasion. Następnie część rekurencyjna powinna dodać jeden dzień do poprzedniej wartości przychodzącej:

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

Warto zauważyć, że używamy TIMESTAMPADD() tutaj, aby obejść problem INTERVAL wyrażenie, które tak naprawdę nie może przyjmować zmiennej.

Jeśli chcesz użyć tego podejścia do wygenerowania serii dat, które pasują do wartości od i do w Twojej tabeli, możesz spróbować sprzężenia:

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

W ten sposób rekurencyjne CTE działa jak kalendarz tabela.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wybrać pierwszy wiersz dla każdej grupy w MySQL?

  2. Drukowanie wyniku zapytania mysql ze zmiennej

  3. Jak wyszukiwać podciągi Soundex() w MySQL?

  4. Jak mogę wyszukać listę słów w tabeli słów powiązanych z inną tabelą?

  5. Jak wyszukiwać dane JSON w MySQL?