select t1.id,t1.value from (select id ,value ,row_number()over(partition by id order by id)ranks from test)t1 inner join (select '4' i from dual) t2 on t1.ranks=t2.i
select
c.id ,
c.value
from
(select a.id,min(a.newID) as newID from
(select rownum as newID , id from 表名 order by id) a
group by a.id) b
inner join
(select rownum as newID , id from 表名 order by id) c
on
b.id = c.id and c.newID = (b.newID + i - 1)
order by
c.id
row_number() r over(partition by id order by id)
其实蛮容易理解的.
如获取每个部门薪水前三名的员工或每个班成绩前三名的学生。
Select * from
(select depno,ename,sal,row_number() over (partition by depno
order by sal desc) rn
from emp)
where rn<=3
看了上面的例子应该明白的