oracle中rank() over与row_number()的差异
rank() OVER对有相同的值,标记相同的值。row_number() 则不会。
故如果要进行排重操作,使用row_number() 将不会有重复记录的产生。
eg:
-------rank() over-------------
select tmp.*
from (select s.YTNEWSID,s.TITLE,s.TITLE_IMG,s.CHANNEL_ID,
rank() over(partition by s.CHANNEL_ID order by release_date desc) px
from YT_NEWS s
where s.status=1
) tmp
where px <= 5
partition by s.CHANNEL_ID order by release_date desc根据列CHANNEL_ID 分组,按照release_date 降序排列。
------row_number() over()-------
select *
from (select s.YTNEWSID,s.TITLE,s.TITLE_IMG,s.CHANNEL_ID,
(Row_number()
over(partition by channel_id order by release_date desc)) rn
from news s)
where rn <= 5;