sql >> データベース >  >> RDS >> Mysql

mysqlでデータ時間行の時間デルタを見つける方法は?

    MySQLでは、これはかなり簡単です。変数を使用して各行のセンサー時間を保存し、それを次の行で時間差を計算するときに使用できるからです。この手法は、データを返すSELECTで変数を割り当てることができないため、MSSQLでは機能しません。他のバージョンのSQLでもおそらく機能しません。通常の方法は、オフセット結合を生成することです。これにより、結合は前の行の値を返しますが、これは非常に遅くなる可能性があります。

    そうは言っても、MySQLでそれを行う1つの方法は次のとおりです。

    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. 値を1つのフィールドから2つに分割

    2. SQL Server での大量の古いデータのアーカイブ

    3. 時間間のデータベース内の同時イベントの検索

    4. SYSBACKUP権限を持つ一般ユーザー