sql >> データベース >  >> RDS >> Mysql

MySQL再帰CTEテーブルが存在しません

    再帰CTEの構造はオフであり、ユニオンの上半分はシードベースケースである必要があります。次に、再帰部分は前の着信値に1日追加する必要があります:

    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;
    

    デモ

    注目すべきは、TIMESTAMPADD()を使用することです INTERVALの問題を回避するためにここに 式。実際には変数を取ることができません。

    このアプローチを使用して、テーブルの開始値と終了値に一致する一連の日付を生成する場合は、結合を試すことができます。

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

    このように使用すると、再帰CTEはカレンダーとして機能します。 テーブル。




    1. MySQLクエリ結果からbashでフィールドをフェッチする方法

    2. T-SQLを使用したファジーマッチング

    3. PostgreSQLで日付をユリウス日に変換する

    4. mysqlでの条件付き結合