Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL / MariaDB :comment trouver des lacunes dans les données temporelles ?

Une approche peut consister à effectuer une première sous-requête et à associer chaque enregistrement à l'enregistrement ayant l'horodatage supérieur le plus proche. Ensuite, interrogez-le et renvoyez tous les enregistrements ayant un espace d'une taille suffisante.

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

Démo

AJOUTER À la réponse d'origine

Si DateTime est toujours en croissance, une amélioration de la vitesse peut être obtenue en modifiant le SELECT interne :

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;