Dans MySQL, c'est assez simple, car vous pouvez utiliser une variable pour stocker l'heure du capteur pour chaque ligne, puis l'utiliser à la ligne suivante lors du calcul de la différence de temps. Cette technique ne fonctionne pas dans MS SQL car elle ne permet pas d'affecter des variables dans un SELECT qui renvoie également des données. Cela ne fonctionnera probablement pas non plus dans d'autres versions de SQL. La méthode habituelle consiste à produire une jointure décalée, dans laquelle la jointure renvoie les valeurs de la ligne précédente, mais cela peut être assez lent.
Cela dit, voici une façon de le faire dans 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 |
+---------------------+-----------+-------+