これは、 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クエリを最適化して、ユーザーごとに最新の行を取得します
- グループごとの最大クエリを最適化する