データを操作するとき、多くの場合、さまざまなデータセットから特定の情報を抽出する必要があります。 PostgreSQL の場合、ユーザーは一意の 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 のデータの最後の行を抽出することです。表:
id | date | another_info |
---|---|---|
1 | 2014-05-13 | kgfd |
2 | 2014-02-01 | SADA |
3 | 2014-06-12 | fdsA |
Postgres の DISTINCT ON 演算子は、このシナリオを効率的に処理します:
select distinct on (id) id, date, another_info from the_table order by id, date desc;
データベース間の互換性を確保するため、row_number() のようなウィンドウ関数を使用します。
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 サイトの他の関連記事を参照してください。