Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL / MariaDB:jak znaleźć luki w danych czasowych?

Jednym z podejść może być wykonanie pierwszego podzapytania i sparowanie każdego rekordu z rekordem mającym najbliższy większy znacznik czasu. Następnie wykonaj zapytanie i zwróć wszystkie rekordy z przerwą o wystarczającym rozmiarze.

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

DODAJ do oryginalnej odpowiedzi

Jeśli DateTime stale rośnie, poprawę prędkości można uzyskać, zmieniając wewnętrzny 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dodaj datę do mysql z php do sortowania później

  2. MySQL zapisuje wyniki EXECUTE w zmiennej?

  3. Wybierz zapytanie mysql między datą?

  4. Jak mogę pominąć kolumnę z instrukcji SELECT podczas używania jej w klauzuli HAVING?

  5. Jak mogę przeglądać zapytania MySQL na żywo?