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

MySQL / MariaDB:時間ベースのデータのギャップを見つける方法は?

    1つのアプローチは、最初にサブクエリを実行し、各レコードを最も近いタイムスタンプの大きいレコードとペアにすることです。次に、それをクエリして、十分なサイズのギャップがあるすべてのレコードを返します。

    SELECT
        DateTime AS GapStart,
        NextDateTime AS GapEnd,
        TIMESTAMPDIFF(SECOND, DateTime, NextDateTime) AS SizeInSecond
    FROM
    (
        SELECT DateTime, Value,
            (SELECT MIN(DateTime) FROM #time t2
             WHERE t2.DateTime > t1.DateTime) AS NextDateTime
        FROM #time t1
    ) t
    WHERE
        TIMESTAMPDIFF(SECOND, DateTime, NextDateTime) > 5;   -- or whatever threshhold you want
    

    デモ

    元の回答に追加

    DateTimeの場合 は常に成長しているため、内部SELECTを変更することで速度を向上させることができます:

    SELECT
        DateTime AS GapStart,
        NextDateTime AS GapEnd,
        TIMESTAMPDIFF(SECOND, DateTime, NextDateTime) AS SizeInSecond
    FROM
    (
        SELECT DateTime, Value,
            (SELECT DateTime FROM #time t2
             WHERE t2.DateTime > t1.DateTime LIMIT 1) AS NextDateTime
        FROM #time t1
    ) t
    WHERE
        TIMESTAMPDIFF(SECOND, DateTime, NextDateTime) > 5;
    



    1. MysqlでLIKE基準を使用してテーブルをパーティション化する方法

    2. mysqlを介してテーブルで最も人気のある単語を取得するにはどうすればよいですか?

    3. 重い結合を使用したMySQLクエリの最適化

    4. 1日の各時間の最新のレコードを選択する方法