Trong MySQL, điều này khá dễ dàng, vì bạn có thể sử dụng một biến để lưu trữ thời gian cảm biến cho mỗi hàng, sau đó sử dụng biến đó ở hàng tiếp theo khi tính toán chênh lệch thời gian. Kỹ thuật này không hoạt động trong MS SQL vì nó không cho phép các biến được gán trong một SELECT cũng đang trả về dữ liệu. Nó có thể sẽ không hoạt động trong các phiên bản SQL khác. Phương pháp thông thường sẽ là tạo một phép nối bù, theo đó phép nối trả về các giá trị từ hàng trước đó, nhưng điều này có thể khá chậm.
Điều đó nói rằng, đây là một cách để làm điều đó trong MySQL:
SELECT
sensor_time,
time_diff,
TIME_TO_SEC(time_diff) > 30 AS alarm
FROM (
SELECT
sensor_time,
TIMEDIFF(sensor_time, @prev_sensor_time) AS time_diff,
@prev_sensor_time := sensor_time AS prev_sensor_time
FROM sensor_table,
(SELECT @prev_sensor_time := NULL) AS vars
ORDER BY sensor_time ASC
) AS tmp;
+---------------------+-----------+-------+
| sensor_time | time_diff | alarm |
+---------------------+-----------+-------+
| 2009-09-28 07:08:12 | NULL | NULL |
| 2009-09-28 07:08:40 | 00:00:28 | 0 |
| 2009-09-28 07:09:10 | 00:00:30 | 0 |
| 2009-09-28 07:09:40 | 00:00:30 | 0 |
| 2009-09-28 07:10:10 | 00:00:30 | 0 |
| 2009-09-28 07:10:40 | 00:00:30 | 0 |
| 2009-09-28 07:41:10 | 00:30:30 | 1 |
| 2009-09-28 07:41:40 | 00:00:30 | 0 |
| 2009-09-28 07:42:10 | 00:00:30 | 0 |
| 2009-09-28 07:42:40 | 00:00:30 | 0 |
+---------------------+-----------+-------+