Re: Getting pk of the most recent row, in a group by

Поиск
Список
Период
Сортировка
От Michael Glaesemann
Тема Re: Getting pk of the most recent row, in a group by
Дата
Msg-id B3C577C1-11B2-47CA-9066-B41A65C5F09A@seespotcode.net
обсуждение исходный текст
Ответ на Getting pk of the most recent row, in a group by  (Bryce Nesbitt <bryce1@obviously.com>)
Список pgsql-sql
On Aug 13, 2007, at 15:05 , Bryce Nesbitt wrote:

> # select type,min(expires),count(*) from coupon group by type;
>  type |    min     | count
> ------+------------+-------
>  free | 2007-01-01 |     4    ; pk=1
>  50%  | 2008-06-01 |     3    ; pk=5
>
> In the second example, is it possible to get the primary key of the  
> row
> with the minimum expires time?

I believe DISTINCT ON will do what you want, if you don't mind using  
non-SQL-spec functionality:

SELECT DISTINCT ON (type)type, expires, coupon_id
FROM coupon
ORDER BY type, expires;

I believe you'd need to add the COUNT using a join:

SELECT type, expires, coupon_id, type_count
FROM (    SELECT DISTINCT ON (type)        type, expires, coupon_id        FROM coupon        ORDER BY type, expires
)earliest_to_expire
 
JOIN (    SELECT type, count(coupon_id) as type_count    FROM coupons    GROUP BY type    ) type_counts USING (type);

Michael Glaesemann
grzm seespotcode net




В списке pgsql-sql по дате отправления:

Предыдущее
От: "Rodrigo De León"
Дата:
Сообщение: Re: Getting pk of the most recent row, in a group by
Следующее
От: Jim Nasby
Дата:
Сообщение: Re: [PERFORM] Performance on writable views