DISTINCT ON
Ако използвате DISTINCT ON
, имате нужда от подзаявка за това:
SELECT *
FROM (
SELECT DISTINCT ON (conversation_id) *
FROM message t
ORDER BY conversation_id, created_at DESC
) sub
ORDER BY created_at DESC;
Редът в подзаявката трябва да съответства на колоните в DISTINCT ON
клауза, така че трябва да го обвиете във външна заявка, за да стигнете до желания ред на сортиране.
Алтернатива с row_number()
Подобна история, имате нужда и от подзаявка:
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;
Вероятно и по-бавно.