oracle 中的 ROW_NUMBER() OVER() 分析函数的用法(oracle去重方法)

ROW_NUMBER() OVER(partition by col1 order by col2) 表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内是连续且唯一的)。

举例:

1.表结构:

SQL> DESC T1;
Name                                           Null?    Type
------------------------------- ------- ----------------------------
ID                                                    NUMBER
NAME                                                    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的效果了,可以根据需要去除重复字段。


猜你喜欢

转载自blog.csdn.net/qq_36595774/article/details/79423305
今日推荐