PostgreSQL Выбор последнего обновления типа категории - PullRequest
2 голосов
/ 04 декабря 2010

У меня есть таблица cars, в которой есть поля make model и update_at.

updated_at - это DateTime

make    | model     | updated_at
----------------------------------
Ford    | Fiesta    | 12-Jan-2010
Chevy   | Sliverado | 13-Jan-2010
Ford    | Focus     | 13-Jan-2010

Я хочу найти последний обновленный автомобиль каждой марки вроде:

make    | model     | updated_at
---------------------------------
Chevy   | Sliverado | 13-Jan-2010
Ford    | Focus     | 13-Jan-2010

Обычно я бы просто group by, но в postgresql, если я сгруппировал по make, я должен включить любые другие выбранные столбцы в group by или в статистическую функцию.

Как получить желаемый результат.

1 Ответ

4 голосов
/ 04 декабря 2010

PostgreSQL 8.4 +:

WITH sample AS (
   SELECT t.make,
          t.model,
          t.updated_at,
          ROW_NUMBER() OVER(PARTITION BY t.make
                                ORDER BY t.updated_at DESC) AS rank
     FROM CARS t)
SELECT s.make,
       s.model,
       s.updated_at
  FROM sample s
 WHERE s.rank = 1

PostgreSQL до 8.4:

При этом используется самостоятельное объединение, но проблема в том, что вы получите дубликаты, если у модели есть две или более моделейс тем же максимальным значением updated_at:

SELECT x.make,
       x.model,
       x.updated_at
  FROM CARS x
  JOIN (SELECT t.make,
               MAX(t.updated_at) AS max_date
          FROM CARS t
      GROUP BY t.make) y ON y.make = x.make
                        AND y.max_date = x.updated_at
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...