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



---------------------------(end of broadcast)---------------------------
TIP 5: don't forget to increase your free space map settings

Reply via email to