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

Mysql同じフィールドのタイムスタンプ間の時間差を計算しますか?

    テーブルに自己参加することができます。このような場合は、次のように機能します。

    SELECT 
    *
    FROM
    yourTable a
    INNER JOIN yourTable b ON a.ID = b.ID + 1
    WHERE TIMESTAMPDIFF(second, a.timestamp, b.timestamp) > 60
    

    ただし、ID列にギャップがあると、これは醜くなる可能性があります。特に、*ロットがある場合、(パフォーマンスの観点から(テーブルに適切なインデックスがない場合))醜くなる可能性があります。 データの。

    したがって、変数を使用してもう少し高度なクエリを使用することをお勧めします。テーブルをそれ自体に結合する必要がない場合、これは通常、かなり高速に実行されます。

    SELECT * FROM (
    SELECT
    yt.*,
    TIMESTAMPDIFF(second, @prevTS, `timestamp`) AS timedifference,
    @prevTS:=yt.`timestamp`
    FROM
    yourTable yt
    , (SELECT @prevTS:=(SELECT MIN(`timestamp`) FROM yourTable)) vars
    ORDER BY ID
    )subquery_alias
    WHERE timedifference > 65
    
    • sqlfiddle でライブで動作することを確認してください

    このクエリをさらに改善して、時差が大きすぎる2つの行を表示することは、問題にはなりません:)深刻な問題が発生した場合は、遠慮なく質問してください。




    1. Mysql 1050エラーテーブルはすでに存在しますが、実際には存在しません

    2. Oracle SQL Developerでパッケージを作成する方法は?

    3. PHPで高精度の小数を操作するにはどうすればよいですか

    4. generate_seriesを使用してPostgreSQLで欠落している日付を埋める方法