sql >> Databáze >  >> RDS >> Mysql

Jak najít časovou deltu řádku datatime v mysql?

V MySQL je to docela snadné, protože můžete použít proměnnou k uložení času senzoru pro každý řádek a pak to použít v dalším řádku při výpočtu časového rozdílu. Tato technika nefunguje v MS SQL, protože neumožňuje přiřazení proměnných v SELECT, který také vrací data. Pravděpodobně to nebude fungovat ani v jiných verzích SQL. Obvyklou metodou by bylo vytvoření offsetového spojení, kdy spojení vrátí hodnoty z předchozího řádku, ale to může být poměrně pomalé.

To znamená, že zde je jeden způsob, jak to udělat v 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 |
+---------------------+-----------+-------+



  1. Výběr prvního řádku na skupinu

  2. MySQL - Načítání nejnižší hodnoty

  3. Jak uniknout % z dotazu python mysql

  4. GIS:PostGIS/PostgreSQL vs. MySql vs. SQL Server?