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

Mysql Tính chênh lệch thời gian giữa các dấu thời gian trong cùng một trường?

Bạn có thể tự tham gia bảng, một cái gì đó như thế này phù hợp với trường hợp của bạn:

SELECT 
*
FROM
yourTable a
INNER JOIN yourTable b ON a.ID = b.ID + 1
WHERE TIMESTAMPDIFF(second, a.timestamp, b.timestamp) > 60

Nhưng điều này có thể trở nên tồi tệ khi bạn có khoảng trống trong cột ID của mình. Và đặc biệt là nó có thể trở nên xấu đi (về mặt hiệu suất (khi bạn không có chỉ số tốt trên bảng)) khi bạn có * nhiều dữ liệu.

Vì vậy, tôi khuyên bạn nên sử dụng các truy vấn nâng cao hơn một chút bằng cách sử dụng các biến. Không cần tham gia bảng với chính nó, nó thường chạy khá nhanh:

SELECT * FROM (
SELECT
yt.*,
TIMESTAMPDIFF(second, @prevTS, `timestamp`) AS timedifference,
@prevTS:=yt.`timestamp`
FROM
yourTable yt
, (SELECT @prevTS:=(SELECT MIN(`timestamp`) FROM yourTable)) vars
ORDER BY ID
)subquery_alias
WHERE timedifference > 65

Để cải thiện hơn nữa truy vấn này để hiển thị hai hàng trong đó chênh lệch quá lớn không phải là vấn đề :) Tuy nhiên, khi bạn gặp rắc rối nghiêm trọng, hãy hỏi.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thêm nhiều cột SAU một cột cụ thể trong MySQL

  2. làm thế nào để lấy dữ liệu từ mysql trong php dựa trên url?

  3. Hạn chế kết nối MySQL từ máy chủ cục bộ để cải thiện bảo mật

  4. Mô hình tập hợp lồng nhau, đếm các mục trong danh mục

  5. Không thể chuyển tham số 2 bằng tham chiếu - uuid PDO