ホームページ >データベース >mysql チュートリアル >PostgreSQL で各 ID の最後の行を効率的に取得するにはどうすればよいですか?
問題:
次のデータがある場合、抽出したいとしますそれぞれの一意の最後のレコードID:
id date another_info 1 2014-02-01 kjkj 1 2014-03-11 ajskj 1 2014-05-13 kgfd 2 2014-02-01 SADA 3 2014-02-01 sfdg 3 2014-06-12 fdsA
望ましい結果:
id date another_info 1 2014-05-13 kgfd 2 2014-02-01 SADA 3 2014-06-12 fdsA
解決策:
を達成するには 2 つの効率的な方法がありますPostgreSQL のこれ:
方法 1: DISTINCT ON 演算子の使用
Postgres には DISTINCT ON 演算子が用意されており、これを使用すると、1 つ以上の列に基づいて個別の行を選択し、他の演算を適用できます。このシナリオでは、以下を使用できます。
SELECT DISTINCT ON (id) id, date, another_info FROM the_table ORDER BY id, date DESC;
方法 2: ウィンドウ関数を使用する
ウィンドウ関数を使用すると、一連の行に対して集計または計算を実行できます。それは動的に定義できます。 ROW_NUMBER() というウィンドウ関数を使用して、各 ID グループ内の各行にランクを割り当て、最も高いランクの行を選択できます。
SELECT id, date, another_info FROM ( SELECT id, date, another_info, ROW_NUMBER() OVER (PARTITION BY id ORDER BY date DESC) AS rn FROM the_table ) t WHERE rn = 1 ORDER BY id;
ウィンドウ関数を使用した解決策は、通常、ウィンドウ関数を使用した解決策よりも高速です。サブクエリ。
以上がPostgreSQL で各 ID の最後の行を効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。