В MySQL это довольно просто, поскольку вы можете использовать переменную для хранения времени датчика для каждой строки, а затем использовать ее в следующей строке при расчете разницы во времени.Этот метод не работает в MS SQL, так как он не позволяет присваивать переменные в SELECT, который также возвращает данные.Вероятно, он не будет работать и в других версиях SQL.Обычный метод заключается в создании соединения со смещением, при котором соединение возвращает значения из предыдущей строки, но это может быть довольно медленным.
Тем не менее, есть один способ сделать это в 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 |
+---------------------+-----------+-------+