これは、 DISTINCT ON
の完璧なユースケースです。 -標準のDISTINCT
のPostgres固有の拡張 :
SELECT DISTINCT ON (category)
id -- , category, date -- any other column (expression) from the same row
FROM tbl
ORDER BY category, date DESC;
ソート順の降順に注意してください。列がNULLになる可能性がある場合は、NULLS LAST
を追加することをお勧めします :
- 列ASCで並べ替えますが、最初にNULL値を使用しますか?
DISTINCT ON
シンプルで高速です。この関連する回答の詳細な説明:
- 各GROUPBYグループの最初の行を選択しますか?
category
ごとに多くの行がある大きなテーブルの場合 別のアプローチを検討してください:
- GROUP BYクエリを最適化して、ユーザーごとに最新の行を取得します
- グループごとの最大クエリを最適化する