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;