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

相关文章
相关标签/搜索