1 2

oracle 根据字段分组取第一条数据及rank函数说明

当前有这样一个需求,根据外键对子表数据进行分组,取每组中的一条数据就行了,如图:

 

 

 如: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的区别:并列以后,下一位并不空出所占的名次.

 

 

 

 

posted @ 2019-09-17 15:30  大海的泡沫  阅读(4216)  评论(0编辑  收藏  举报
1 2