2013-10-28 29 views
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版本。

回答

1

作爲其中一種方法,可以按如下方式完成。在這裏,我們使用dense_rank() over()分析函數爲排序的行中的行分配排名。

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