Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como encontrar um delta de tempo de uma linha de datatime no mysql?


No MySQL, isso é bastante fácil, pois você pode usar uma variável para armazenar o tempo do sensor para cada linha e usá-la na próxima linha ao calcular a diferença de tempo. Esta técnica não funciona no MS SQL, pois não permite que variáveis ​​sejam atribuídas em um SELECT que também está retornando dados. Provavelmente também não funcionará em outras versões do SQL. O método usual seria produzir uma junção de deslocamento, em que a junção retorna valores da linha anterior, mas isso pode ser bastante lento.

Dito isso, aqui está uma maneira de fazer isso no 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 |
+---------------------+-----------+-------+