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

PostgreSQL-列の値が変更されました-クエリ最適化を選択します

    これは私が分析でそれを行う方法です:

    SELECT id, val
      FROM ( SELECT id, val
               ,LAG(val) OVER (ORDER BY id) AS prev_val
           FROM p ) x
      WHERE val <> COALESCE(prev_val, val)
      ORDER BY id
    

    更新(説明あり):

    分析関数は後処理ステップとして機能します。クエリ結果はグループに分けられます(partition by )および分析関数は、グループ化のコンテキスト内で適用されます。

    この場合、クエリはpからの選択です。 。適用されている分析関数はLAGです。 。 partition byがないため 句では、グループ化は1つだけです。つまり、結果セット全体です。このグループ化は、idの順に並べられています。 。 LAG 指定された順序を使用して、グループ化の前の行の値を返します。その結果、各行にはvalである追加の列(別名prev_val)があります。 前の行の。それがサブクエリです。

    次に、valが含まれる行を探します valと一致しません 前の行(prev_val)の。 COALESCE 前の値がない最初の行の特殊なケースを処理します。

    分析関数は最初は少し奇妙に思えるかもしれませんが、分析関数を検索すると、それらがどのように機能するかを説明する多くの例が見つかります。例: http ://www.cs.utexas.edu/~cannata/dbms/Analytic%20Functions%20in%20Oracle%208i%20and%209i.htm これは後処理ステップであることを忘れないでください。サブクエリを実行しない限り、分析関数の値に対してフィルタリングなどを実行することはできません。



    1. OSGi上のPostgreSQLコネクタ

    2. SQLiteのファイルからSQLスクリプトを実行する5つの方法

    3. JSP /サーブレット:zipファイルをアップロードして解凍し、CSVファイルを抽出するにはどうすればよいですか。

    4. C#クエリ:'System.InvalidOperationException' |追加情報:接続は有効で開いている必要があります