当前有这样一个需求,根据外键对子表数据进行分组,取每组中的一条数据就好了,如图: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