DISTINCT ON
Hvis du bruger DISTINCT ON
, du skal bruge en underforespørgsel til det:
SELECT *
FROM (
SELECT DISTINCT ON (conversation_id) *
FROM message t
ORDER BY conversation_id, created_at DESC
) sub
ORDER BY created_at DESC;
Rækkefølgen i underforespørgslen skal stemme overens med kolonnerne i DISTINCT ON
klausul, så du skal pakke den ind i en ydre forespørgsel for at nå frem til din ønskede sorteringsrækkefølge.
Alternativ med row_number()
Lignende historie, du har også brug for en underforespørgsel:
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;
Også sandsynligvis langsommere.