sql >> Databasteknik >  >> RDS >> Mysql

MySQL / MariaDB:hur hittar man luckor i tidsbaserad data?

Ett tillvägagångssätt kan vara att först undersöka och para ihop varje post med posten som har närmast större tidsstämpel. Fråga sedan efter det och returnera alla poster som har ett gap av tillräcklig storlek.

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

LÄGG TILL I originalsvaret

Om DateTime växer hela tiden, hastighetsförbättringar kan uppnås genom att ändra den interna 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. SQL Server AlwaysOn ( Availability Group ) Arkitektur och Steg för Steg Installation - 3 Manuell misslyckande över steg

  2. Topp 30 mest användbara Concurrent Manager-frågor

  3. Varför använda Select Top 100 Percent?

  4. Ta bort dubbletter från Count()-resultat i SQLite