sql >> Database >  >> RDS >> Mysql

MySQL / MariaDB:hoe hiaten in op tijd gebaseerde gegevens vinden?

Een benadering kan zijn om eerst een subquery uit te voeren en elk record te koppelen aan het record met de dichtstbijzijnde grotere tijdstempel. Vraag dat vervolgens op en retourneer alle records met een opening van voldoende grootte.

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

TOEVOEGEN aan origineel antwoord

Als DateTime groeit altijd, snelheidsverbetering kan worden verkregen door de interne SELECT te wijzigen:

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. Een uitzondering krijgen ORA-00942:tabel of weergave bestaat niet - bij invoegen in een bestaande tabel

  2. Een samengestelde externe sleutel maken in SQL Server (T-SQL-voorbeeld)

  3. mysql telt mee in PHP-variabele

  4. Is er een verschil tussen IS NULL en =NULL?