oracle分析函数rank(),row_number(),lag()等的使用方法
row_number() over (partition by col1 order by col2)
表示根据col1分组,在分组内部根据 col2排序
而这个值就表示每组内部排序后的顺序编号(组内连续的唯一的)
rank() 类似,不过rank 排序的时候跟派名次一样,可以并列2个第一名之后 是第3名
lag 表示 分组排序后 ,组内后面一条记录减前面一条记录的差,第一条可返回 null
btw: expert one on one 上讲的最详细,还有很多相关特性,文档看起来比较费劲
row_number()和rownum差不多,功能更强一点(可以在各个分组内从1开时排序)
rank()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内)
dense_rank()是连续排序,有两个第二名时仍然跟着第三名。
相比之下row_number是没有重复值的
lag(arg1,arg2,arg3):
arg1是从其他行返回的表达式
arg2是希望检索的当前行分区的偏移量。是一个正的偏移量,时一个往回检索以前的行的数目。
arg3是在arg2表示的数目超出了分组的范围时返回的值。
以下是我多表查询时用到,因为有些记录的id是相同,而我只需要取出最后一条即可。
select * from (
select distinct bb01.abz001 abz001,bb01.aab004 aab004,bb96.abb531 abb531,
row_number() over(partition by bb01.abz001 order by bb96.abb531 desc) number1
from bb01 left join bb96 on bb96.Abz001 = bb01.Abz001
Where bb96.abb534='01')
where number1=1;
abz001是编号,abb531是顺序
注意:1.条件 bb96.abb534='01' 放在where 跟on后面是不同的,可以参考前面博客内容
2.我给每个字段一个别名,因为刚开始写的时候没别名出错,不过后来去掉也不报错了,所以如果有些人写的时候字段无法识别是可以加个别名。
分享到:
相关推荐
Oracle分析函数RANK(),ROW_NUMBER(),LAG()等的使用方法,需要的朋友可以参考下。
Oracle分析函数RANK(),ROW_NUMBER(),LAG()等的使用方法 Oracle分析函数参考手册 开窗函数(over)详解
Oracle 分析函数详解 1. 自动汇总函数rollup,cube, 2. rank 函数, rank,dense_rank,row_number 3. lag,lead函数 4. sum,avg,的移动增加,移动平均数 5. ratio_to_report报表处理函数 6. first,last取基数的分析函数
1、oracle分析函数 中文: 主要含: rank() 和 dense_rank() first_value()和last_value() row_number() LAG() range开窗函数 2、oracle分析函数 英文: 比较详细
Oracle分析函数——函数列表 SUM :该函数计算组中表达式的累积和 MIN :在一个组中的数据窗口中查找表达式的最小值 MAX :在一个组中的数据窗口中查找表达式的最大值 AVG :用于计算一个组和数据窗口内表达式的...
从论坛搜到的,感觉还不错,整理成了word文档,希望对...2. rank 函数, rank,dense_rank,row_number 3. lag,lead函数 4. sum,avg,的移动增加,移动平均数 5. ratio_to_report报表处理函数 6. first,last取基数的分析函数
1,数值型函数(abs()、sign()、ceil()、floor()、power()、exp()、round()...);...6,分析函数(sum(...) over(...)、dense_rank、row_number()、lag()...); 7,其它函数(decode()、nvl()、nvl2()、least()...);
作者通过总结各自多年的软件开发和教学培训经验,与大家分享了掌握Oracle SQL所独有的丰富功能的技巧所在,内容涵盖SQL执行、联结、集合、分析函数、子句、事务处理等多个方面。读者可以学习到以下几个方面的技巧:...
本文是对Oracle中分析函数做的总结,主要总结了前几篇关于分析函数、窗口函数、报表函数文章的内容,需要的朋友可以参考下。