sql >> Databáze >  >> RDS >> Mysql

MySQL / MariaDB:jak najít mezery v datech založených na čase?

Jedním přístupem může být nejprve poddotaz a spárování každého záznamu se záznamem, který má nejbližší větší časové razítko. Poté se na to zeptejte a vraťte všechny záznamy s mezerou dostatečné velikosti.

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

Ukázka

PŘIDAT k původní odpovědi

Pokud DateTime neustále roste, zlepšení rychlosti lze dosáhnout změnou vnitřního 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. Mac nainstalujte a otevřete mysql pomocí terminálu

  2. Bootstrapping SQL Express z WiX?

  3. Převést datum do formátu data MYSQL

  4. Cloud Native a DevSecOps ve velkém s Capgemini Agile Innovation Platform a Oracle Cloud