查询根据最高排名获取项目

时间:2013-10-28 17:06:10

标签: sql oracle plsql

我有一张表格,对我所拥有的物品进行排名。

我需要一个查询,它只能获取给定项目的前2个排名,排名可能不是按顺序排列。

我需要获取至少两个等级的项目,两个项目的等级也相同。

这是我桌子的快照。

Item Id Supp Id Rank
1   2   2
1   1   7
1   7   5
1   9   11
2   67  4
2   9   14
2   10  14
2   34  4
2   25  3
2   60  3
2   79  5

我的要求是,如果我输入2,我应该得到如下结果

Item Id Supp_id Rank
2   25  3
2   60  3
2   67  4
2   34  4

我使用的是oracle 10g版本。

1 个答案:

答案 0 :(得分:1)

作为其中一种方法,可以如下进行。在这里,我们使用dense_rank() over()分析函数为按rank行排序的行分配排名。

select t.item_id
     , t.supp_id
     , t.rank
  from (select item_id
             , supp_id
             , rank
             , dense_rank() over(partition by item_id 
                                     order by rank) as rn
          from t1
          where item_id = 2 
         ) t
where t.rn <= 2

结果:

   ITEM_ID    SUPP_ID       RANK
---------- ---------- ----------
         2         25          3 
         2         60          3 
         2         67          4 
         2         34          4 

SQLFiddle Demo