sql >> Database teknologi >  >> RDS >> Mysql

Hvordan finder man et tidsdelta af en datatime-række i mysql?

I MySQL er dette ret nemt, da du kan bruge en variabel til at gemme sensortiden for hver række, og derefter bruge den i næste række, når du beregner tidsforskellen. Denne teknik virker ikke i MS SQL, da den ikke tillader variabler at blive tildelt i en SELECT, som også returnerer data. Det virker nok heller ikke i andre versioner af SQL. Den sædvanlige metode ville være at producere en forskudt joinforbindelse, hvorved joinforbindelsen returnerer værdier fra den foregående række, men dette kan være ret langsomt.

Når det er sagt, her er en måde at gøre det på i 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. Sikkerhedskopier MySQL-brugere

  2. Cloud SQL eller VM Instance til at være vært for MySQL-databasen

  3. MySQL-kode til at konvertere Excel datetime

  4. Hvorfor er forespørgselsparametrene for mange websteder (MySQL) meget kryptiske lange heltal?