select distinct on (author.id)
book.id, author.id, author.name, book.title as last_book
from
author
inner join
book on book.author_id = author.id
order by author.id, book.id desc
Periksa distinct on
Dengan perbedaan, kolom "berbeda" harus disertakan dalam order by
. Jika itu bukan urutan yang Anda inginkan maka Anda perlu membungkus kueri dan menyusun ulang
select
*
from (
select distinct on (author.id)
book.id, author.id, author.name, book.title as last_book
from
author
inner join
book on book.author_id = author.id
order by author.id, book.id desc
) authors_with_first_book
order by authors_with_first_book.name
Solusi lain adalah dengan menggunakan fungsi jendela seperti pada jawaban Lennart. Dan satu lagi yang sangat umum adalah ini
select
book.id, author.id, author.name, book.title as last_book
from
book
inner join
(
select author.id as author_id, max(book.id) as book_id
from
author
inner join
book on author.id = book.author_id
group by author.id
) s
on s.book_id = book.id
inner join
author on book.author_id = author.id