Một cách tiếp cận có thể là truy vấn con đầu tiên và ghép nối từng bản ghi với bản ghi có dấu thời gian lớn hơn gần nhất. Sau đó, truy vấn và trả về tất cả các bản ghi có khoảng trống có kích thước đủ lớn.
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
THÊM vào câu trả lời ban đầu
Nếu DateTime
luôn phát triển, có thể cải thiện tốc độ bằng cách thay đổi SELECT nội bộ:
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;