Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

NHÓM MySQL THEO DateTime +/- 3 giây

Tôi đang sử dụng ý tưởng tuyệt vời của Tom H. nhưng làm theo cách khác một chút ở đây:

Thay vì tìm tất cả các hàng là phần bắt đầu của chuỗi, chúng tôi có thể tìm tất cả lần đó là phần bắt đầu của chuỗi, sau đó quay lại và điều chỉnh các hàng phù hợp với thời gian.

Truy vấn số 1 ở đây sẽ cho bạn biết thời điểm nào là thời điểm bắt đầu của chuỗi bằng cách tìm thời gian nào không có bất kỳ thời điểm nào bên dưới chúng nhưng trong vòng 3 giây:

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

Và sau đó đối với mỗi hàng, chúng tôi có thể tìm thấy dấu thời gian bắt đầu chuỗi lớn nhất nhỏ hơn dấu thời gian của chúng tôi với Truy vấn số 2:

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

Khi chúng tôi có điều đó, chúng tôi có thể NHÓM THEO nó như bạn muốn.

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

Tôi không hoàn toàn chắc chắn rằng điều này đủ khác biệt với câu trả lời của Tom H để được đăng riêng, nhưng có vẻ như bạn đang gặp khó khăn khi triển khai và tôi đang suy nghĩ về nó, vì vậy tôi nghĩ tôi sẽ đăng lại. Chúc bạn thành công!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chọn từ nhiều bảng mà không có liên kết?

  2. Tham gia Mysql cung cấp các hàng trùng lặp

  3. Cách cài đặt MySQL 8 trên Windows

  4. Chương trình MySQL mysql_tzinfo_to_sql

  5. Làm thế nào để quản lý Vai trò Người dùng trong Cơ sở dữ liệu?