PostgreSQL не позволяет мне группировать столбцы по порядку

В PostgreSQL я хочу получить всех пользователей сразу и упорядочить их по дате.

Это мой запрос:

SELECT id, useridx, isread, message, date
  FROM messages
 WHERE isread = 1
 GROUP BY useridx
 ORDER BY date DESC

Это образец данных:

------------------------------------------------------
+  id  |  useridx |  isread  |  messsage |  date     +
------------------------------------------------------
   1   |  1       |  0        | Hello    |  2012-01-01    
   2   |  2       |  1        | Hi       |  2012-01-02    
   3   |  3       |  1        | Test     |  2012-01-03    
   4   |  3       |  0        | My Msg   |  2012-01-04    
   5   |  4       |  1        | sadasd   |  2012-01-05    
   6   |  4       |  1        | sdfsdfd  |  2012-01-06    
   7   |  4       |  0        | sdfsdfsd |  2012-01-07    
   8   |  5       |  0        | 5345634  |  2012-01-08
   9   |  6       |  0        | sdfdfsd  |  2012-01-09
   10  |  7       |  0        | sdfsdfsf |  2012-01-10
------------------------------------------------------

Теперь я хочу получить эту таблицу, сгруппировав их через useridx и упорядочив по дате.

Ожидаемый результат:

------------------------------------------------------
+  id  |  useridx |  isread  |  messsage |  date     +
------------------------------------------------------  
   6   |  4       |  1        | sdfsdfd  |  2012-01-06 
   3   |  3       |  1        | Test     |  2012-01-03  
   2   |  2       |  1        | Hi       |  2012-01-02    
------------------------------------------------------

Фактический результат

ERROR:  column "messages.date" must appear in the GROUP BY clause or be used in an aggregate function

Я также не хочу группировать дату. Я просто хочу сгруппировать с useridx и отсортировать их по дате DESC.

Любая помощь/идея приветствуется!

Примечание. :Я также пробовал Distinct. Не соответствует моим потребностям или я сделал неправильно.

Я очень запутался и застрял между DISTINCT ONи rank()методами.

Заключение: Для тех, кто столкнулся с такой же проблемой, может прочитать это как ответ. Ответы @kgrittn и @mu слишком короткие верны. Я буду продолжать использовать как ответы, так и схемы в своем проекте, и со временем я смогу понять, какой из них лучший -, я думаю -. Итак, выберите один из них и продолжайте свою работу. Вы будете в порядке.

Последнее обновление:Иногда Distinct On исключает некоторые идентификаторы из результата. Допустим, у меня есть столбец идентификаторов, и у меня есть 6 одинаковых строк. Таким образом, в отличие от исключения его из результата, НО ранг ()просто приводит его. Итак, используйте ранг ()!

16
задан flower58 1 May 2012 в 12:50
поделиться