ORACLE 中的 ROW_NUMBER() OVER() 分析函數的用法 函數
ROW_NUMBER() OVER(partition by col1 order by col2) 表示根據col1分組,在分組內部根據col2排序,而此函數計算的值就表示每組內部排序後的順序編號(組內是連續且惟一的)。 排序
舉例: it
SQL> DESC T1; io
Name Null? Type101 bbb 10-SEP-13 co
101 ccc 11-SEP-13
102 ddd 08-SEP-13
102 eee 11-SEP-13
SQL> SELECT ID,NAME,DATE1,ROW_NUMBER() OVER(partition by ID order by DATE1 desc) as RN FROM T1;
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
把上面語句做爲一個子表語句,嵌入到另外一條語句中:
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