1

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

我需要一个查询,它只会获取给定项目的前 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 版本。

4

1 回答 1

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 演示

于 2013-10-28T17:17:25.677 回答