sql >> Base de Datos >  >> RDS >> Mysql

MySQL / MariaDB:¿cómo encontrar lagunas en los datos basados ​​en el tiempo?

Un enfoque podría ser realizar una primera subconsulta y emparejar cada registro con el registro que tenga la marca de tiempo mayor más cercana. Luego, consulte eso y devuelva todos los registros que tengan una brecha de un tamaño suficiente.

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

Demostración

AÑADIR a la respuesta original

Si DateTime siempre está creciendo, la mejora de la velocidad se puede obtener cambiando el SELECT interno:

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;