sql >> Databáze >  >> RDS >> Mysql

Rekurzivní CTE tabulka MySQL neexistuje

Struktura vašeho rekurzivního CTE je vypnutá a horní polovina sjednocení by měla být základním případem. Potom by rekurzivní část měla přidat jeden den k předchozí příchozí hodnotě:

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;

Ukázka

Za zmínku stojí, že používáme TIMESTAMPADD() zde, abyste se vyhnuli problému INTERVAL výraz, který ve skutečnosti nemůže přijmout proměnnou.

Pokud chcete tento přístup použít ke generování řady dat, která odpovídají hodnotám od a do ve vaší tabulce, můžete zkusit spojení:

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

Při použití tímto způsobem funguje rekurzivní CTE jako kalendář tabulka.




  1. Jak ukládat data JSON v MySQL

  2. Řešení úniku prostředků GDI

  3. Může datový typ Postgres NUMERIC ukládat podepsané hodnoty?

  4. SQL Server Náhodné řazení