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 字段分组取出最新的一条数据。
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;
然后取出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;