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
- xem nó hoạt động trực tiếp trong sqlfiddle
Để 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.