1

現在の行と前の行の日時の違いを確認しています。

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 用

4

2 に答える 2

1

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 TO_SECONDS(A.Pacific_Time) - TO_SECONDS(B.Pacific_Time) > 5 LIMIT 30;

このクエリを試してください。

于 2013-06-21T18:18:07.550 に答える