Я создаю функцию обмена сообщениями для приложения, моя таблица базы данных выглядит следующим образом:
messages:
id
senderId
receiverId
threadId <-- every message is part of a thread
createdAt
У меня есть страница «Сообщения», в которой есть карточка для каждой цепочки сообщений, но я хочу еепоказать последнее сообщение в карточке в качестве предварительного просмотра для каждой темы.Это запрос, который я написал до сих пор:
SELECT DISTINCT ON ("threadId") * FROM messages ORDER BY "createdAt" DESC;
Итак, я делаю DISTINCT ON ("threadId")
, но я также выбираю все столбцы, потому что мне нужны все данные, поэтому есть *
после предложения DISTINCT ON
.До этого момента этот запрос работал нормально, но теперь он не выполняется по предложению ORDER BY
.Я хочу вернуть сообщение, которое было создано последним, но я получаю сообщение об ошибке:
ERROR: SELECT DISTINCT ON expressions must match initial ORDER BY expressions
LINE 1: SELECT DISTINCT ON ("threadId") * FROM messages order by "cr...
Я понимаю, что я думаю об ошибке (столбец ORDER BY
должен соответствоватьстолбец, к которому применяется DISTINCT ON
), но я не знаю, как сделать запрос таким, каким я хочу, который должен быть упорядочен по createdAt
, прежде чем он станет отчетливым.