0

MySQL テーブルに、行の値の間隔がほぼ等しい列があります (型は datetime です)。ある時点で、この間隔ははるかに小さくなり、テーブルの最後まで小さいままです。この突然の間隔のジャンプに対応するセルの値を取得する必要があります。

もちろん、全体をダウンロードし、値をスキャンしてステッピングの変化を検出することはできますが、このアプリケーションは Web ベースであり、不要な負荷を避けたいと考えています。純粋に MySQL の手段で、ステッピングの急激な変化が発生する値を検出できますか?

例:

# step is 1 month for some rows...
1960.01.01 00:00:00
1960.02.01 00:00:00
1960.03.01 00:00:00 <- at this point, step changes to just 1 hour
1960.03.01 01:00:00 
1960.03.01 02:00:00
1960.03.01 03:00:00

「1960.03.01 00:00:00」の値を返すクエリが必要です。これは、ステップが突然変化したポイントです。

前もってありがとう、アスカー

4

1 に答える 1

0

次のことを試すことができます。

select *
from (select t.*,
             (select MIN(t.dt) from t t2 where t2.dt > t.dt
             ) as nexttime,
             (select MAX(t.dt) from t t2 where t2.dt < t.dt
             ) as prevtime
      from t
     ) t
where to_seconds(t.dt) - to_seconds(t.prevtime) <> to_seconds(t.nexttime) - to_seconds(t.dt)

サブクエリは、相関サブクエリを使用して、( ) の前の最大時間prevtimeと ( ) の後の最初の時間を計算します。nexttime次に、各行の前回と次回の時間差をチェックします。差 (秒単位) が異なる場合、行が選択されます。

列にインデックスがある場合は、datetimeうまく機能するはずです。

于 2013-04-02T21:04:49.880 に答える