轉轉轉--oracle 去重並按時間排序取第一條


select  t.*  
   from (select a.*, row_number() over(partition by 需要分組的字段 order by 更新時間 desc) rw  
           from 表 a) t  
  where t.rw = 1  

row_number()over(partition by col1 order by col2)表示根據col1分組,在分組內部根據col2排序,而此函數計算的值就表示每組內部排序后的順序編號(組內連續的唯一的)。 

與rownum的區別在於:使用rownum進行排序的時候是先對結果集加入偽劣rownum然后再進行排序,而此函數在包含排序從句后是先排序再計算行號碼。 

row_number()和rownum差不多,功能更強一點(可以在各個分組內從1開始排序)。 

rank()是跳躍排序,有兩個第二名時接下來就是第四名(同樣是在各個分組內) 

dense_rank()也是連續排序,有兩個第二名時仍然跟着第三名。相比之下row_number是沒有重復值的。 

oracle 分析函數 row_number(),返回一個整數值(>=1);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM