Re: Lowest 2 items per - Mailing list pgsql-sql

From Mario Dankoor
Subject Re: Lowest 2 items per
Date
Msg-id 4FC90A7F.9020605@gmail.com
Whole thread Raw
In response to Re: Lowest 2 items per  ("Relyea, Mike" <Mike.Relyea@xerox.com>)
Responses Re: Lowest 2 items per
List pgsql-sql
On 2012-06-01 5:44 PM, Relyea, Mike wrote:
>> -----Original Message-----
>> From: David Johnston [mailto:polobo@yahoo.com]
>> Sent: Friday, June 01, 2012 11:13 AM
>> To: Relyea, Mike
>> Cc:<pgsql-sql@postgresql.org>
>> Subject: Re: [SQL] Lowest 2 items per
>>
>>
>> I would recommend using the "RANK" window function with an appropriate
>> partition clause in a sub-query then in the outer query you simply
> WHERE
>> rank<= 2
>>
>> You will need to decide how to deal with ties.
>>
>> David J.
>
>
> David,
>
> I've never used window functions before and rank looks like it'd do the
> job quite nicely.  Unfortunately I'm using 8.3 - which I should have
> mentioned in my original request but didn't.  Window functions weren't
> introduced until 8.4 from what I can tell.
>
> Mike
>
Mike,

try following query it's a variation on a top  N ( = 3) query
SELECT FRS.*
FROM (      SELECT  PRN.make             ,PRN.model             ,CSM.color             ,CSM.type
,cost/yieldrank      FROM  consumable            CSM           ,printers              PRN
,printersandconsumablePCM      WHERE 1 = 1      AND PCM.printerid    = PRN.printerid      AND PCM.consumableid =
CSM.consumableid     group by PRN.make             ,PRN.model             ,CSM.color             ,CSM.type      ) FRS
 
WHERE 3 > (            SELECT COUNT(*)            FROM (                   SELECT  PRN.make
,PRN.model                         ,CSM.color                          ,CSM.type                          ,cost/yield
rank                   FROM  consumable            CSM                         ,printers              PRN
         ,printersandconsumable PCM                    WHERE 1 = 1                    AND PCM.printerid    =
PRN.printerid                   AND PCM.consumableid = CSM.consumableid                    group by PRN.make
               ,PRN.model                            ,CSM.color                            ,CSM.type                  )
NXT           WHERE 1 = 1            AND NXT.make = FRS.make            AND NXT.model= FRS.model            AND
NXT.color=FRS.color            AND NXT.type = FRS.type            AND NXT.cost <= FRS.cost          )
 


pgsql-sql by date:

Previous
From: "Oliveiros d'Azevedo Cristina"
Date:
Subject: Re: Lowest 2 items per
Next
From: "Relyea, Mike"
Date:
Subject: Re: Lowest 2 items per