Oracle之ROW_NUMBER() OVER() 分组排序函数

文章目录

  • ROW_NUMBER() OVER() 分组排序

ROW_NUMBER() OVER() 分组排序

语法: row_number() over(partition by 分组列 order by 排序列 desc) rn

注意:在使用 row_number() over()函数时候,over()里头的分组以及排序的执行晚于 where 、group by、 order by 的执行。

常见需求:根据某个字段分组取出最新的一条数据。

原数据:

SELECT 
   rir.id,
   rir.INDU_ID , -- 需要分组的字段
   rir.RANK_CODE ,
   rir.CREATE_TIME 
FROM RPT_INDU_RANK rir

根据INDU_ID 字段分组取出最新的一条数据。
Oracle之ROW_NUMBER() OVER() 分组排序函数_第1张图片

SELECT 
	T.*,
	ROW_NUMBER() OVER(PARTITION BY T.INDU_ID ORDER BY T.CREATE_TIME DESC) RN
FROM (
SELECT 
   rir.id,
   rir.INDU_ID ,
   rir.RANK_CODE ,
   rir.CREATE_TIME 
FROM RPT_INDU_RANK rir) T;

Oracle之ROW_NUMBER() OVER() 分组排序函数_第2张图片
然后取出RN=1 的数据

SELECT 
 *
FROM 
(SELECT 
	T.*,
	ROW_NUMBER() OVER(PARTITION BY T.INDU_ID ORDER BY T.CREATE_TIME DESC) RN
FROM (
SELECT 
   rir.id,
   rir.INDU_ID ,
   rir.RANK_CODE ,
   rir.CREATE_TIME 
FROM RPT_INDU_RANK rir) T) TT WHERE TT.RN = 1;

Oracle之ROW_NUMBER() OVER() 分组排序函数_第3张图片

你可能感兴趣的:(日常记录,oracle,数据库,database)