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的區別:並列以後,下一位並不空出所佔的名次.

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章