Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL / MariaDB:como encontrar lacunas em dados baseados em tempo?


Uma abordagem pode ser a primeira subconsulta e emparelhar cada registro com o registro que possui o maior carimbo de data/hora mais próximo. Em seguida, consulte isso e retorne todos os registros com uma lacuna de tamanho 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



Demonstração



ADICIONAR à resposta original

Se DateTime está sempre crescendo, a melhoria da velocidade pode ser obtida alterando o 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;