Ini adalah kasus penggunaan yang sempurna untuk DISTINCT ON - ekstensi khusus Postgres dari DISTINCT standard standar :
SELECT DISTINCT ON (category)
id -- , category, date -- any other column (expression) from the same row
FROM tbl
ORDER BY category, date DESC;
Hati-hati dengan urutan pengurutan menurun. Jika kolomnya bisa NULL, Anda mungkin ingin menambahkan NULLS LAST :
- Urutkan menurut kolom ASC, tetapi nilai NULL terlebih dahulu?
DISTINCT ON sederhana dan cepat. Penjelasan terperinci dalam jawaban terkait ini:
- Pilih baris pertama di setiap grup GROUP BY?
Untuk tabel besar dengan banyak baris per category pertimbangkan pendekatan alternatif:
- Optimalkan kueri GROUP BY untuk mengambil baris terbaru per pengguna
- Optimalkan kueri maksimum berdasarkan grup