現在の行と前の行の日時の違いを確認しています。
Pacific_Time 日時、
id int
SELECT A.id, A.Pacific_Time, B.id, B.Pacific_Time,
A.Pacific_Time - B.Pacific_Time AS Time_Delta from TBL1 A
JOIN TBL1 B
ON A.id - 1 =B.id
WHERE A.Pacific_Time - B.Pacific_Time > 5
LIMIT 30;
同じテーブルをそれ自体に対して結合していますが、1 行下または上にシフトしています。ほとんどの行は 1 秒間隔で区切られています。5 秒以上離れている行を探しています。問題は、Pacific_Time が 59 秒から次の分の 0 秒になると、実際には 1 秒の差であるのに、41 秒のデルタが与えられることです。次に例を示します。
A.id A.Pacific_Time B.id B.Pacific_Time (A.Pacific_Time - B.Pacific_Time )
50 2011-07-19 07:49:55 49 2011-07-19 07:49:54 1.000000
51 2011-07-19 07:49:56 50 2011-07-19 07:49:55 1.000000
52 2011-07-19 07:49:57 51 2011-07-19 07:49:56 1.000000
53 2011-07-19 07:49:58 52 2011-07-19 07:49:57 1.000000
54 2011-07-19 07:49:59 53 2011-07-19 07:49:58 1.000000
55 2011-07-19 07:50:00 54 2011-07-19 07:49:59 41.000000
56 2011-07-19 07:50:01 55 2011-07-19 07:50:00 1.000000
57 2011-07-19 07:50:02 56 2011-07-19 07:50:01 1.000000
58 2011-07-19 07:50:03 57 2011-07-19 07:50:02 1.000000
を使用してみましtimediff()
たが、正しい結果が得られましたが、実行速度が大幅に低下しました。これは 20000 行のテーブルで実行されていますが、100 万行近くのテーブルで実行する必要があります。
何かアドバイス?
mysql Ver 14.14 Distrib 5.5.29、debian-linux-gnu 用