SQL中分析函数ROW_NUMBER() OVER(PARTITION BY GRADEOBJECTID ORDER BY BG.GRADEDATE DESC)的用法!!!
这是我第一次在****上写博客,对于菜鸟小编我来说鸭梨还是很大哟,写的不好请读者理解,哪里说的有不清澈的,还望多多指出,定会虚心请教,下面就不多说废话啦,进入主题!!!!!!!!!!!!!!!!!
今天在做项目的时候,在拼写sql时遇到使用分析函数 row_number() over(partition by ** order by ** desc)的这么一种情况,刚开始自己对分析函数并不了解,只不过在平时和同事聊天中提起到过,可以说压根自己根本就不会用,经过上网查阅了一些关于分析函数的资料和今天在项目中的实际运用,也使我对分析函数有了初步的理解!下面我就分享一下,本人对这个分析函数的一些见解:
首先分析函数这个概念想必大家都多少有一定的理解,顾名思义 ,就是在主查询结果集的基础上进行一定的分析;
这里的over是一个关键字,用来标识分析函数的;
partition by ** 是用来根据某个字段分区的,相当于结果集分成了多个数据窗口,可选参数,如果不存在任何分区子句,全部的结果集客看做一个单一的大区;
order by ** 是指根据某个字段排序,可选参数,每个分区结果集按指定字段排序;
对于 row_number()函数,官方给出的解释是,返回结果集分区内行的***,每个分区的第一行从1 开始;我对它的理解就是,通过此函数可以为表中某个字段建立序列,从1开的,也就是说根据已存在的某列,利用此函数建立一个新列,这一列就是***;
下面就不啰嗦啦,直接上代码啦,这是我那个sql中的一部分,看选中部分,这里说明一下,字段GRADEOBJECTID 对象ID,字段GRADEDATE 评级日期;FICRM_B_GRADE 对手评级表
业务场景是这个样子的,系统页面需要展示的字段是 "最新信用评级",在这里就必须使用 partition by 与order by 啦,然后在取***为 1 的,就可以渠道指定对象的最新信用评级啦!!!好啦, 就到这里吧,不多啰嗦啦,今后当遇到类似业务场景后,可以对大家有所帮助