Oracle中的over(partition by...)分析函数及开窗函数

假设有一张表student

Name  Score  InsertTime   (Name:姓名  Score:成绩 InsertTime:考试时间)

张三     20    2015-08-08

李四   12  2015-09-01

小Q     33      2015-09-03

张三     20    2015-09-08

李四   12  2015-07-01

小Q      25      2015-06-03

现在要求每个人按照考试时间的先后顺序进行排序,请写出oracle语句

答:

select row_number() over(partition by name order by inserttime) row_number,student.* from student

解释:

partition by 根据名字先进行分组,order by 在根据inserttiom进行排序

结果

张三     20    2015-08-08

张三     20    2015-09-08

李四   12  2015-07-01

李四   12  2015-09-01

小Q      25      2015-06-03

小Q     33      2015-09-03

这种方法可以灵活应用。比如取每个分组中的最新数据或者第一条数据

select row_number() over(partition by name order by inserttime) row_number,student.* from student where row_number=1

张三     20    2015-08-08

李四   12  2015-07-01

小Q      25      2015-06-03

有问题直接留言 第一时间回复

时间: 2024-10-13 04:42:34

Oracle中的over(partition by...)分析函数及开窗函数的相关文章

转,Oracle中关于处理小数点位数的几个函数,取小数位数,Oracle查询函数

关于处理小数点位数的几个oracle函数() 1. 取四舍五入的几位小数 select round(1.2345, 3) from dual; 结果:1.235 2. 保留两位小数,只舍 select trunc(1.2345, 2) from dual; 结果:1.23 select trunc(1.2399, 2) from dual; 结果:1.23 3.取整数 返回大于或等于x的最大整数: SQL> select ceil(23.33) from dual; 结果: 24 返回等于或小于

分析函数之开窗函数over

一.分析函数 -- Oracle从8.1.6开始提供分析函数,专门用于解决复杂报表统计需求的功能强大的函数, -- 它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计值.分析函数用于计算基于组的某种聚合值. -- 它和聚合函数的不同之处是:对于每个组返回多行,而聚合函数对于每个组只返回一行.普通的聚合函数用group by分组, -- 每个分组返回一个统计值:而分析函数采用partition by分组,并且每组每行都可以返回一个统计值. -- 1.分析函数的形

oracle中add&split partition对global&local index的影响

生产库中某些大表的分区异常,需要对现有表进行在线操作,以添加丢失分区,因为是生产库,还是谨慎点好,今天有空,针对add&split分区对global&local索引的影响进行了测试,测试版本为oracle11.2.0.4,过程如下: 首先,创建分区表: CREATE TABLE TP1 ( C1 INT PRIMARY KEY, C2 VARCHAR2(10), C3 CHAR(10) ) partition by range (c1) ( partition p1 values less

Oracle 中count(1) 、count(*) 和count(列名) 函数的区别

1)count(1)与count(*)比较: 1.如果你的数据表没有主键,那么count(1)比count(*)快2.如果有主键的话,那主键(联合主键)作为count的条件也比count(*)要快3.如果你的表只有一个字段的话那count(*)就是最快的啦4.count(*) count(1) 两者比较.主要还是要count(1)所相对应的数据字段.5.如果count(1)是聚索引,id,那肯定是count(1)快.但是差的很小的.  因为count(*),自动会优化指定到那一个字段.所以没必要

oracle 中模糊查询对like的代替insrt()函数 可以做到效率节约一倍以上

昨天在处理一个字符拆分的功能时,用用到了insrt()函数,偶然发现其实特可以代替模糊查询的like,经多次测试可节约效率一倍以上. 代码如下: select distinct(a.deptname) from sys_depart a, gzdb_task b where instr(a.deptname,b.acceptor ) > 0; select distinct(a.deptname) from sys_depart a, gzdb_task b where a.deptname l

oracle中生成包含大小写字符和数字的函数

function createString(n_num in number) return varchar2 is i integer default 0; v_token varchar2(50) default ''; begin while i < n_num loop if mod(round(dbms_random.value(1, 2)), 2) > 0 then --生成字符 if (mod(round(dbms_random.value(1, 2)), 2) > 0) t

【转】oracle中rownum和row_number()

这篇文章主要介绍了oracle中rownum和row_number()的使用方法以及区别和联系,十分的详细,有需要的小伙伴可以参考下. row_number()over(partition by col1 order by col2)表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的). 与rownum的区别在于:使用rownum进行排序的时候是先对结果集加入伪劣rownum然后再进行排序,而row_number()在包含排序从句后

oracle中rownum和row_number()

row_number()over(partition by col1 order by col2)表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的). 与rownum的区别在于:使用rownum进行排序的时候是先对结果集加入伪劣rownum然后再进行排序,而row_number()在包含排序从句后是先排序再计算行号码. 一.oracle中rownum 用于从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字

ORACLE 中rownum和row_number()的使用区别(可指定取sql结果集的第几个数据)

这篇文章主要介绍了oracle中rownum和row_number()的使用方法以及区别和联系,十分的详细,有需要的小伙伴可以参考下. row_number()over(partition by col1 order by col2)表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的). 与rownum的区别在于:使用rownum进行排序的时候是先对结果集加入伪劣rownum然后再进行排序,而row_number()在包含排序从句后