我有一张表格,对我所拥有的物品进行排名。
我需要一个查询,它只能获取给定项目的前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版本。
答案 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