oracle 中的 ROW_NUMBER() OVER() 分析函数的用法(oracle去重方法)
2018-03-02 15:05
716 查看
ROW_NUMBER() OVER(partition by col1 order by col2) 表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内是连续且唯一的)。
SQL> DESC T1;Name Null? Type------------------------------- ------- ----------------------------ID NUMBERNAME VARCHAR2(10)DATE1 DATE
2.查看表数据:
SQL> SELECT * FROM T1; ID NAME DATE1---------- ------------------ ----------- 101 aaa 09-SEP-13 101 bbb 10-SEP-13 101 ccc 11-SEP-13 102 ddd 08-SEP-13 102 eee 11-SEP-13
3.ROW_NUMBER() OVER:
SQL> SELECT ID,NAME,DATE1,ROW_NUMBER() OVER(partition by ID order by DATE1 desc) as RN FROM T1;//表示根据 ID 字段分组,在分组内部根据 DATE1 字段排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内是连续且唯一的)。
ID NAME DATE1 RN---------- ------------------------------ ------------------ ---------- 101 ccc 11-SEP-13 1 101 bbb 10-SEP-13 2 101 aaa 09-SEP-13 3 102 eee 11-SEP-13 1 102 ddd 08-SEP-13 2
4.把上面语句作为一个子表语句,嵌入到另一条语句中:
SQL> SELECT ID,NAME,DATE1 FROM (SELECT ID,NAME,DATE1,ROW_NUMBER() OVER(partition by ID order by DATE1 desc) as RN FROM T1)T WHERE T.RN=1;
ID NAME DATE1---------- ------------------------------ ------------------ 101 ccc 11-SEP-13 102 eee 11-SEP-13
这样就达到了去除重复id的效果了,可以根据需要去除重复字段。
举例:
1.表结构:SQL> DESC T1;Name Null? Type------------------------------- ------- ----------------------------ID NUMBERNAME VARCHAR2(10)DATE1 DATE
2.查看表数据:
SQL> SELECT * FROM T1; ID NAME DATE1---------- ------------------ ----------- 101 aaa 09-SEP-13 101 bbb 10-SEP-13 101 ccc 11-SEP-13 102 ddd 08-SEP-13 102 eee 11-SEP-13
3.ROW_NUMBER() OVER:
SQL> SELECT ID,NAME,DATE1,ROW_NUMBER() OVER(partition by ID order by DATE1 desc) as RN FROM T1;//表示根据 ID 字段分组,在分组内部根据 DATE1 字段排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内是连续且唯一的)。
ID NAME DATE1 RN---------- ------------------------------ ------------------ ---------- 101 ccc 11-SEP-13 1 101 bbb 10-SEP-13 2 101 aaa 09-SEP-13 3 102 eee 11-SEP-13 1 102 ddd 08-SEP-13 2
4.把上面语句作为一个子表语句,嵌入到另一条语句中:
SQL> SELECT ID,NAME,DATE1 FROM (SELECT ID,NAME,DATE1,ROW_NUMBER() OVER(partition by ID order by DATE1 desc) as RN FROM T1)T WHERE T.RN=1;
ID NAME DATE1---------- ------------------------------ ------------------ 101 ccc 11-SEP-13 102 eee 11-SEP-13
这样就达到了去除重复id的效果了,可以根据需要去除重复字段。
相关文章推荐
- ORACLE 中的 ROW_NUMBER() OVER() 分析函数的用法
- Oracle 中的 ROW_NUMBER() OVER() 分析函数的用法
- 浅谈oracle中row_number() over()分析函数用法
- oracle的“over partition by”的用法,over不能单独使用,要和分析函数:rank(),dense_rank(),row_number()等一起使用。
- 浅谈oracle中row_number() over()分析函数用法
- ORACLE 中的 ROW_NUMBER() OVER() 分析函数的用法
- ORACLE 中的 ROW_NUMBER() OVER() 分析函数的用法
- 浅谈oracle中row_number() over()分析函数用法
- ORACLE 中的 ROW_NUMBER() OVER() 分析函数的用法
- Oracle 分析函数row_number() over (partition by order by ) 的 Mysql的替代方法
- 浅谈oracle中row_number() over()分析函数用法
- 浅谈oracle中row_number() over()分析函数用法
- 浅谈oracle中row_number() over()分析函数用法
- 排名函数(ROW_NUMBER、RANK、DENSE_RANK)及OVER子句 Oracle 中分析函数用法之--rank(),dense_rank(),partition,over()
- 深入探讨:oracle中row_number() over()分析函数用法
- 浅谈oracle中row_number() over()分析函数用法
- 深入探讨:oracle中row_number() over()分析函数用法
- 记录---ORACLE 中的 ROW_NUMBER() OVER() 分析函数的用法
- 浅谈oracle中row_number() over()分析函数用法
- ORACLE 中的 ROW_NUMBER() OVER() 分析函数的用法