In MySQL ist dies ziemlich einfach, da Sie eine Variable verwenden können, um die Sensorzeit für jede Zeile zu speichern, und diese dann in der nächsten Zeile verwenden, wenn Sie die Zeitdifferenz berechnen. Diese Technik funktioniert nicht in MS SQL, da sie es nicht erlaubt, Variablen in einem SELECT zuzuweisen, das auch Daten zurückgibt. Es wird wahrscheinlich auch in anderen Versionen von SQL nicht funktionieren. Die übliche Methode wäre, einen Offset-Join zu erzeugen, wobei der Join Werte aus der vorherigen Zeile zurückgibt, aber das kann ziemlich langsam sein.
Das heißt, hier ist eine Möglichkeit, dies in MySQL zu tun:
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 |
+---------------------+-----------+-------+