oracle 根據字段分組取第一條數據及rank函數說明


當前有這樣一個需求,根據外鍵對子表數據進行分組,取每組中的一條數據就行了,如圖:

 

 

 如:COMMANDID = 26的有兩條,只取一條數據。

sql語句:

select *
  from(select SYSTEMID,COMMANDID,SUBTYPE,LISTCONTENT,STRING1,STRING2,STRING3,STRING4,STRING5,NUMBER1,NUMBER2,NUMBER3,NUMBER4,NUMBER5,
               rank() over(partition by e.commandid order by e.systemid desc) rankNo
          from COMMAND_NOFILTER_COMMANDINFO e) e
 where e.rankNo = 1 ;

解釋下上面sql的意思:
rank() over(partition by e.commandid order by e.systemid desc) rankNo (
partition by 根據什么進行分組,
order by 根據什么進行排序,
rank() over() 進行排名
rankNo 別名

e.rankNo = 1 即是取排名后的第一條數據,即完成了業務需要的sql語句。

使用 rank()over(order by 字段 )得到記錄排序

根據某個字段進行排名,排名相同的時候下一個排名累加,比如第三和第四一樣,那么第三第四排名都是3,第五排名是5而非4,空出並列所占的名稱

如:

 

 dense_rank() over與ran() over的區別:並列以后,下一位並不空出所占的名次.

 

 

 

 


免責聲明!

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



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