DISTINCT ON
Wenn Sie DISTINCT ON
, dafür brauchen Sie eine Unterabfrage:
SELECT *
FROM (
SELECT DISTINCT ON (conversation_id) *
FROM message t
ORDER BY conversation_id, created_at DESC
) sub
ORDER BY created_at DESC;
Die Reihenfolge in der Unterabfrage muss mit den Spalten im DISTINCT ON
übereinstimmen -Klausel, also müssen Sie sie in eine äußere Abfrage einschließen, um zu Ihrer gewünschten Sortierreihenfolge zu gelangen.
Alternativ mit row_number()
Ähnliche Geschichte, Sie brauchen auch eine Unterabfrage:
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;
Wahrscheinlich auch langsamer.