PostgreSQL 9.3, запрос с группировкой, выбор максимума из группы.

Рейтинг: 1Ответов: 3Опубликовано: 05.10.2014

Есть таблица с полями url и created_at.

В таблице есть множество записей с одинаковым url. Мне нужно получить записи со самым старшим created_at, для каждой группы с одинаковым url. Т.е., имея:

url         | created_at
------------------------
abc         |          1
abc         |          2
def         |          3
def         |          0

Получить:

url         | created_at
------------------------
abc         |          2
def         |          3

Пробовал сделать это так:

SELECT *
FROM items
GROUP BY url
HAVING created_at = MAX(created_at)

Получаю:

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

Попробовал то же самое немного иначе:

SELECT MAX(created_at) AS last_created_At, *
FROM items
GROUP BY url
HAVING created_at = last_created_at

Получил:

ERROR:  column "last_created_at" does not exist
LINE 4: HAVING created_at = last_created_at`

Похоже, я неправильно понимаю, как работает GROUP BY HAVING. Как мне достичь желаемого?

ДОБАВЛЕНО: Достиг желаемого с помощью вложенного запроса, но вопрос остаётся открытым, как это сделать без него:

SELECT *
FROM items
WHERE created_at = (SELECT MAX(created_at)
                    FROM items AS t
                    WHERE t.url = items.url)

Ответы

Ответов пока нет.