Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL / MariaDB:come trovare le lacune nei dati basati sul tempo?

Un approccio potrebbe essere quello di eseguire prima una sottoquery e accoppiare ogni record con il record con il timestamp maggiore più vicino. Quindi, esegui una query e restituisci tutti i record con uno spazio vuoto di dimensioni sufficienti.

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

Dimostrazione

AGGIUNGI alla risposta originale

Se DateTime è sempre in crescita, il miglioramento della velocità può essere ottenuto modificando il 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;