當前有這樣一個需求,根據外鍵對子表數據進行分組,取每組中的一條數據就好了,如圖: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