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
Zkontrolujte distinct on
Při rozlišeném je nutné zahrnout "odlišné" sloupce do order by
. Pokud to není požadované pořadí, musíte dotaz zabalit a znovu objednat
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
Dalším řešením je použití funkce okna jako v Lennartově odpovědi. A další velmi obecný je tento
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