Thread: select best price
Hi folks I've got a table holding item code(cs_id), supplier a/c (co_id) , and price (cs_price). How can I select the rows containing the lowest price for each item code? I've tried various forms of min() etc and know it must be simple but I'm stumped. Gary -- Gary Stainburn This email does not contain private or confidential material as it may be snooped on by interested government parties for unknown and undisclosed purposes - Regulation of Investigatory Powers Act, 2000
On Wednesday 26 October 2005 4:21 pm, Gary Stainburn wrote: > Hi folks > > I've got a table holding item code(cs_id), supplier a/c (co_id) , and > price (cs_price). > > How can I select the rows containing the lowest price for each item > code? > > I've tried various forms of min() etc and know it must be simple but > I'm stumped. > > Gary I've come up with the select below. Is there a better/more efficient way of doing this? select cp.cs_id, from cons_price_details cp, (select cs_id, min(cs_price) as cs_price from cons_price_details group by cs_id ) v where cp.cs_id = v.cs_id and cp.cs_price = v.cs_price; -- Gary Stainburn This email does not contain private or confidential material as it may be snooped on by interested government parties for unknown and undisclosed purposes - Regulation of Investigatory Powers Act, 2000
On Wed, Oct 26, 2005 at 16:38:48 +0100, Gary Stainburn <gary.stainburn@ringways.co.uk> wrote: > On Wednesday 26 October 2005 4:21 pm, Gary Stainburn wrote: > > Hi folks > > > > I've got a table holding item code(cs_id), supplier a/c (co_id) , and > > price (cs_price). > > > > How can I select the rows containing the lowest price for each item > > code? > > > > I've tried various forms of min() etc and know it must be simple but > > I'm stumped. > > > > Gary > > I've come up with the select below. Is there a better/more efficient > way of doing this? > > select cp.cs_id, from cons_price_details cp, > (select cs_id, min(cs_price) as cs_price > from cons_price_details > group by cs_id > ) v > where cp.cs_id = v.cs_id and cp.cs_price = v.cs_price; If you only need one lowest price entry where there are ties, you could also use DISTINCT ON (a nonstandard Postgres extension) and ORDER BY that may execute faster.