DISTINCT ON
Als u DISTINCT ON
, daar heb je een subquery voor nodig:
SELECT *
FROM (
SELECT DISTINCT ON (conversation_id) *
FROM message t
ORDER BY conversation_id, created_at DESC
) sub
ORDER BY created_at DESC;
De volgorde in de subquery moet overeenkomen met de kolommen in de DISTINCT ON
clausule, dus je moet het in een buitenste query verpakken om tot de gewenste sorteervolgorde te komen.
Alternatief met row_number()
Soortgelijk verhaal, je hebt ook een subquery nodig:
SELECT id, sender_id, receiver_id, conversation_id, subject, body, created_at
FROM (
SELECT *, row_number() OVER (PARTITION BY conversation_id
ORDER BY created_at DESC) AS rn
FROM message t
) sub
WHERE rn = 1
ORDER BY created_at DESC;
Ook waarschijnlijk langzamer.