Re: Join issue on a maximum value - Mailing list pgsql-sql

From Edmund Bacon
Subject Re: Join issue on a maximum value
Date
Msg-id 4086C9D2.9030707@onesystem.com
Whole thread Raw
In response to Join issue on a maximum value  (Heflin <hhogan@tampabay.rr.com>)
List pgsql-sql
Two choices that work:

Either add another JOIN in which retrieves the MAX(image_id) for each 
auction:

SELECT auction.auction_id, image.image_id, image.image_descr   FROM auction   JOIN image USING(auction_id)   JOIN (
SELECTauction_id, MAX(image_id) AS image_id            FROM image           GROUP BY auction_id) max_aid USING
(image_id)  WHERE owner = 'Mabel'   ORDER by auction.auction_id;
 

OR use a sub-select:

SELECT auction.auction_id, image_id, image.image_descr  FROM auction  JOIN image USING (auction_id) WHERE image_id = (
SELECTmax(image_id)                       FROM image                     WHERE auction_id = auction.auction_id)    AND
image_owner= 'Mabel';
 

Test both with your data - My experience is that the sub-select runs 
slower than throwing in the extra join.


Heflin wrote:

> OK, it's been a while since I've had to do anything remotely complex 
> in SQL, so this may just be a pure brain block on my part.
>
> I have 2 tables, auction and image, defined like this:
>
>                                   Table "public.auction"
>     Column      |  Type   |                            
> Modifiers                           
> -----------------+---------+----------------------------------------------------------------- 
>
> auction_id      | integer | not null default 
> nextval('public.auction_auction_id_seq'::text)
> auction_descrip | text    |
> auction_owner   | text    |
> Indexes:
>    "auction_pkey" primary key, btree (auction_id)
>
>
>                                Table "public.image"
>   Column    |  Type   |                          
> Modifiers                         
> -------------+---------+------------------------------------------------------------- 
>
> image_id    | integer | not null default 
> nextval('public.image_image_id_seq'::text)
> auction_id  | integer | not null
> image_descr | text    |
> Indexes:
>    "image_pkey" primary key, btree (image_id)
> Foreign-key constraints:
>    "$1" FOREIGN KEY (auction_id) REFERENCES auction(auction_id) ON 
> UPDATE RESTRICT ON DELETE RESTRICT
>
>
> Current data in the tables:
>
> play=# select * from auction
> play-# ;
> auction_id | auction_descrip | auction_owner
> ------------+-----------------+---------------
>          1 | Mabel Auction 1 | Mabel
>          2 | Mabel Auction 2 | Mabel
>          3 | Mabel Auction 3 | Mabel
>          4 | Fred Auction 1  | Fred
>          5 | Fred Auction 2  | Fred
>
>
> play=# select * from image;
> image_id | auction_id | image_descr
> ----------+------------+-------------
>        1 |          1 | image 1
>        2 |          1 | image 2
>        3 |          2 | image 3
>        4 |          3 | image 4
>        5 |          3 | image 5
>        6 |          4 | image 7
>        7 |          3 | image 8
>
> So a basic JOIN gets this:
>
> SELECT auction.auction_id, image.image_id, image.image_descr
> FROM auction JOIN image ON auction.auction_id = image.auction_id
> WHERE auction.auction_owner = 'Mabel';
>
> auction_id | image_id | image_descr
> ------------+----------+-------------
>          1 |        1 | image 1
>          1 |        2 | image 2
>          2 |        3 | image 3
>          3 |        4 | image 4
>          3 |        5 | image 5
>          3 |        7 | image 8
> (6 rows)
>
> Now the problem: I can't seem to remember how to get only the max 
> value for the image_id for each auction_id so that the result set 
> would be:
>
> auction_id | image_id | image_descr
> ------------+----------+-------------
>          1 |        2 | image 2
>          2 |        3 | image 3
>          3 |        7 | image 8
>
> Playing with the max() aggregate seems to be the correct path, but for 
> the life of me I can't seem to get the syntax to the point that it 
> produces what I need. Any help would be greatly appreciated!
>
> Thanks,
>
> -Heflin
>
>
>

-- 
Edmund Bacon <ebacon@onesystem.com>



pgsql-sql by date:

Previous
From: Kemin Zhou
Date:
Subject: Server Side C programming Environment Set up
Next
From: Kemin Zhou
Date:
Subject: rule's behavior with join interesting