在ORACLE中,对于row_number() over(partition by a order by b asc,c desc)函数的应用:
这个函数的意思是以a进行分组,b升序,c降序排列;
一个例子:比如一个人有很多保单,当需要得到人下面的最新保单信息
查找客户下的最新保单出单机构
select clnt.投保人,clnt.保单号,clnt.生效日
from (select row_number() over(partition by 投保人 order by 投保人 asc, 生效日 desc) rn,
pol_clnt.*
from (select t.保单投保人 投保人,
t.保单号 保单号,
t.保单生效日 生效日
from ods_mart.i_pol t
where t.保单状态 != '02'
and t.保单状态 = '03') pol_clnt) clnt
where rn = 1;
其中i_pol是保单表,以保单投保人进行分组,以保单投保人升序,保单生效日降序排列,取每个投保人下面的最新保单即rn=1;