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

SQLを使用して行間の変更を効率的に判別する方法

    これを試してみてください-パフォーマンスが向上することを保証するつもりはありませんが、行を「前の」行と関連付ける通常の方法です:

    SELECT
        * --TODO, list columns
    FROM
        data d
           left join
        data d_prev
           on
               d_prev.time < d.time --TODO - Other key columns?
           left join
        data d_inter
           on
               d_inter.time < d.time and
               d_prev.time < d_inter.time --TODO - Other key columns?
    WHERE
        d_inter.time is null AND
        (d_prev.value is null OR d_prev.value <> d.value)
    

    (これは正しいと思います-それを検証するためにいくつかのサンプルデータで行うことができます)

    基本的に、アイデアはテーブルをそれ自体に結合し、各行(d内)に対して結合することです。 )、候補行を検索します(d_prev内) )「前の」行の場合。次に、さらに結合を実行して、行を見つけようとします(d_inter内) )現在の行(d内)の間に存在します )および候補行(d_prev内) )。そのような行が見つからない場合(d_inter.time is null )、その候補は確かに前の行でした。



    1. TRY_CAST()がSQLServerでどのように機能するか

    2. 複数のエンティティバインディングを使用してElasticSearchインデックス構造を設定する方法

    3. OracleDatabaseでカーソルが複数の値を返すカーソルベースのレコードデータ型

    4. データベーススナップショットのパフォーマンスを見る