當前有這樣一個需求,根據外鍵對子表數據進行分組,取每組中的一條數據就行了,如圖:
如: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的區別:並列以后,下一位並不空出所占的名次.