Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL / MariaDB:bagaimana menemukan celah dalam data berbasis waktu?

Satu pendekatan mungkin untuk subquery pertama dan memasangkan setiap catatan dengan catatan yang memiliki stempel waktu terdekat yang lebih besar. Kemudian, kueri itu, dan kembalikan semua catatan yang memiliki celah dengan ukuran yang memadai.

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

TAMBAHKAN ke jawaban asli

Jika DateTime selalu berkembang, peningkatan kecepatan dapat diperoleh dengan mengubah SELECT internal:

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:ORDER BY dengan tanggal kosong '0000-00-00' sebagai yang terakhir tetapi sisanya ASC

  2. pengindeksan parsial mysql, pengindeksan terbalik

  3. Dynamic Linq gagal saat menggunakan Berisi melawan Int Field

  4. Permintaan JPA Native mendapatkan Objek Tunggal

  5. cara mengikat json dinamis ke treeview wpf