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

MySQL / MariaDB:hvordan finder man huller i tidsbaserede data?

En fremgangsmåde kan være at først underforespørge og parre hver post med posten med det nærmeste større tidsstempel. Forespørg derefter på det, og returner alle poster med et mellemrum af tilstrækkelig størrelse.

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

Demo

FØJ TIL til originalt svar

Hvis DateTime er altid i vækst, kan hastighedsforbedring opnås ved at ændre den interne SELECT:

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;



  1. Brug NEWSEQUENTIALID() til at oprette en inkrementerende GUID i SQL Server

  2. Valg af MySql-tabeldata i et array

  3. Hvad er forskellen mellem MySQLdb, mysqlclient og MySQL connector/Python?

  4. Cx-Freeze:Showwarning AttributeError:'NoneType'-objekt har ingen attribut 'write'