Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL / MariaDB:как да намерим пропуски в базирани на време данни?

Един подход може да бъде първата подзаявка и сдвояване на всеки запис със записа с най-близкото по-голямо времеви печат. След това потърсете това и върнете всички записи с достатъчен размер празнина.

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

Демо

ДОБАВЯНЕ към оригиналния отговор

Ако DateTime винаги нараства, подобрение на скоростта може да се постигне чрез промяна на вътрешния 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. Отдалечената връзка с MySQL се проваля с неизвестен метод за удостоверяване

  2. MySQL 1292 Неправилна стойност за дата и час

  3. Сортиране на изхода на SQL ред по произволен ред?

  4. com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:Неизправност на комуникационната връзка

  5. Мога ли да вмъкна дата в mySQL във формат DD-Mon-YY?