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

MySQL GROUP BY DateTime +/- 3 detik

Saya menggunakan ide bagus Tom H. tetapi melakukannya sedikit berbeda di sini:

Alih-alih menemukan semua baris yang merupakan awal dari rantai, kita dapat menemukan semua waktu itu adalah awal dari rantai, lalu kembali dan temukan baris yang sesuai dengan waktunya.

Pertanyaan #1 di sini akan memberi tahu Anda waktu mana yang merupakan awal dari rantai dengan menemukan waktu mana yang tidak memiliki waktu di bawahnya tetapi dalam 3 detik:

SELECT DISTINCT Timestamp
FROM Table a
LEFT JOIN Table b
ON (b.Timestamp >= a.TimeStamp - INTERVAL 3 SECONDS
    AND b.Timestamp < a.Timestamp)
WHERE b.Timestamp IS NULL

Dan kemudian untuk setiap baris, kita dapat menemukan stempel waktu awal rantai terbesar yang lebih kecil dari stempel waktu kita dengan Kueri #2:

SELECT Table.id, MAX(StartOfChains.TimeStamp) AS ChainStartTime
FROM Table
JOIN ([query #1]) StartofChains
ON Table.Timestamp >= StartOfChains.TimeStamp
GROUP BY Table.id

Setelah kami memilikinya, kami dapat mengelompokkannya sesuai keinginan Anda.

SELECT COUNT(*) --or whatever
FROM Table
JOIN ([query #2]) GroupingQuery
ON Table.id = GroupingQuery.id
GROUP BY GroupingQuery.ChainStartTime

Saya tidak sepenuhnya yakin ini cukup berbeda dari jawaban Tom H untuk diposting secara terpisah, tetapi sepertinya Anda mengalami masalah dengan implementasi, dan saya sedang memikirkannya, jadi saya pikir saya akan memposting lagi. Semoga berhasil!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tidak dapat menemukan baris yang cocok di tabel pengguna

  2. MySQL Recursive dapatkan semua anak dari orang tua

  3. Bagaimana saya bisa melindungi nama pengguna dan kata sandi MySQL dari dekompilasi?

  4. Apa yang Setara dengan LEN() di MySQL?

  5. kesalahan sintaks readyStatement