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

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

 

 

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

sql語句:code

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 字段 )獲得記錄排序blog

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

如:it

 

 dense_rank() over與ran() over的區別:並列之後,下一位並不空出所佔的名次.io

相關文章
相關標籤/搜索