W MySQL jest to dość proste, ponieważ możesz użyć zmiennej do przechowywania czasu czujnika dla każdego wiersza, a następnie użyć go w następnym wierszu podczas obliczania różnicy czasu. Ta technika nie działa w MS SQL, ponieważ nie pozwala na przypisywanie zmiennych w SELECT, który również zwraca dane. Prawdopodobnie nie zadziała również w innych wersjach SQL. Zwykłą metodą byłoby utworzenie sprzężenia przesunięcia, przy czym sprzężenie zwraca wartości z poprzedniego wiersza, ale może to być dość powolne.
To powiedziawszy, oto jeden sposób na zrobienie tego w 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 |
+---------------------+-----------+-------+