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

NULLで区切られたデータ系列間のMySQLSelectの日付範囲

    私はあなたの「より複雑な問題」(まだ答えに取り組んでいます)を見てきましたが、ここにこの問題の解決策があります。ウィンドウ関数を使用している場合、MySQL 8を使用していると想定しているため、CTEも使用できます。

    WITH cte AS (SELECT DATE(`date_time`) AS `date`,
                        `data`,
                        MAX(`data`) OVER (ORDER BY `date_time` ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS `data_max`
                 FROM `test`),
    cte2 AS (SELECT `date`,
                    `data`,
                    `data_max`,
                    CASE WHEN `data` < `data_max` THEN `data` - `data_max` END AS `data_diff`
             FROM cte)
    SELECT `data_max`, 
           MIN(CASE WHEN `data_diff` IS NOT NULL THEN date END) AS diff_date_from,
           MAX(CASE WHEN `data_diff` IS NOT NULL THEN date END) AS diff_date_to
    FROM cte2
    GROUP BY `data_max`
    HAVING diff_date_from IS NOT NULL
    

    出力:

    data_max    diff_date_from  diff_date_to
    4           2017-01-04      2017-01-06
    5           2017-01-09      2017-01-11
    6           2017-01-13      2017-01-13
    

    dbfiddleのデモ



    1. レストラン配信データモデル

    2. MySQLデータベースに1対多の関係を保存する方法は?

    3. SQLalchemyが外部キーを作成するためのテーブルを見つけられません

    4. PostgreSQLを使用したMoodleの高可用性データベースの構築