Oracle的row_number() over函数使用整理

函数语法: ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)
函数作用:从1开始,为按组排序的每条记录添加一个序列号  函数只能用于select和order by子句中 不能用在where子句

不分组排序
不进行分组时语法为ROW_NUMBER() OVER(ORDER BY COLUMN)

分组排序
分组的话ROW_NUMBER() OVER(PARTITION BY COL1 ORDER BY COL2)表示根据COL1分组,在分组内部根据COL2排序,
而此函数的结果值就表示每组内部排序后的顺序编号(组内连续的惟一的)

--过滤重复数据,取得最新的记录
select
    temp.id,
    temp.device_id,
    temp.update_dtm,
    temp.test_result
from (
         select
             t.id,
             t.device_id,
             t.update_dtm,
             t.test_result,
             row_number() OVER(PARTITION BY device_id ORDER BY t.update_dtm desc) as row_flg   
          from DEVICE_INFO_TBL t ) temp
where temp.row_flg  = '1'

其他使用场景,参考如下博客:

https://blog.csdn.net/qq_25221835/article/details/82762416

扩展:
oracle自带row_num也能完成,差别就是row_num从0开始。
另外还有两个类似函数rank() over() 和dense_rank() over()

发布了132 篇原创文章 · 获赞 64 · 访问量 47万+

猜你喜欢

转载自blog.csdn.net/qiuzhi__ke/article/details/100098972