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
चेक distinct on
अलग-अलग के साथ order by
. में "विशिष्ट" कॉलम शामिल करना आवश्यक है . यदि वह वह क्रम नहीं है जो आप चाहते हैं तो आपको क्वेरी को लपेटने और पुन:क्रमित करने की आवश्यकता है
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
एक अन्य समाधान विंडो फ़ंक्शन का उपयोग करना है जैसा कि लेनार्ट के उत्तर में है। और एक और बहुत ही सामान्य यह है
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