Получить новейшую запись перед запросом GROUP BY - PullRequest
3 голосов
/ 24 мая 2011

Используя postgres, я хотел бы получить каждый пакет, но получить самый последний пакет для каждой группы.

Например, у меня есть эта таблица с именем products:

package_name        price           date
-               |   52500.0 |   20080910
-               |   52900.0 |   20090422
-               |   52900.0 |   20090706
ELITE PACKAGE   |   62200.0 |   20080910
ELITE PACKAGE   |   62500.0 |   20090706
ELITE PACKAGE   |   62500.0 |   20090422
TECH PACKAGE    |   57200.0 |   20080910
TECH PACKAGE    |   58200.0 |   20090706
TECH PACKAGE    |   58200.0 |   20090422

И я хотел бы получить следующий результат с SQL-запросом:

-                   |   52900.0 |   20090706
ELITE PACKAGE       |   62500.0 |   20090706
TECH PACKAGE        |   58200.0 |   20090706

Я пробовал пару вещей, которые (я думаю) работали бы в mySQL, но я не могу понять это правильно для postgres.

Возможно ли это сделать, и как бы я это сделал?

Спасибо,

Stephanie

Ответы [ 2 ]

5 голосов
/ 24 мая 2011

Еще один вариант, позволяющий избежать самостоятельного объединения (я всегда ненавижу самостоятельные объединения)

SELECT package_name,price,date FROM
(
 SELECT package_name,price,date,
        ROW_NUMBER() OVER (PARTITION BY package_name ORDER BY date DESC) as rw
 FROM products
) a
WHERE rw=1;
3 голосов
/ 24 мая 2011
SELECT t.package_name, p.price, t.MaxDate
    FROM (SELECT package_name, MAX(date) AS MaxDate
              FROM products
              GROUP BY package_name) t
        INNER JOIN products p
            ON t.package_name = p.package_name
                and t.MaxDate = p.date
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...