分页查询总结
2014-01-16 19:14
281 查看
今天帮一同学解决了一个比较奇葩的sql问题。
数据
日期 成绩
201201 5
201202 3
201203 1
201204 4
201205 5
要求:从某一个年月往前推,合格数据(成绩大于3)的连续条数,只要发现有一条不符合条件,就停止下来,当前的连续记录数就是要求的结果,不管前面是否还有连续的记录条数。
思路:
1.可以先找出不符合条件的记录集当中年月最大的一条,只需要对其按年月进行降序。
2.从这条记录当中取出的年月,然后作为找出符合条件的记录的条件,符合条件的记录必须大于这个年月,找出的记录数就是结果。
select count(1) from t where to_date('201306', 'yyyymm')>to_date((select 日期
from t
where 成绩 < 3
and rownum = 1
order by 日期 desc));
优化过程:其实.......
优化之后如下
select months_between(to_date (select 日期
from t
where 成绩 < 3
and rownum = 1
order by 日期 desc, 'yyyymm'),
to_date('201306', 'yyyymm'));
对于关键字rownum的理解
rownum可以理解为对每条记录的一个标号
select * from lccont where rownum between 1 and 4 and conttype='2'
select * from (select rownum rn,t.* from lccont t) m where m.conttype='2' and m.rn between 1 and 4
两种效果都一样。
但第二种多了一列行号,可以区分出没有主键时,具有相同字段值的不同记录。
两种比较
.....
数据
日期 成绩
201201 5
201202 3
201203 1
201204 4
201205 5
要求:从某一个年月往前推,合格数据(成绩大于3)的连续条数,只要发现有一条不符合条件,就停止下来,当前的连续记录数就是要求的结果,不管前面是否还有连续的记录条数。
思路:
1.可以先找出不符合条件的记录集当中年月最大的一条,只需要对其按年月进行降序。
2.从这条记录当中取出的年月,然后作为找出符合条件的记录的条件,符合条件的记录必须大于这个年月,找出的记录数就是结果。
select count(1) from t where to_date('201306', 'yyyymm')>to_date((select 日期
from t
where 成绩 < 3
and rownum = 1
order by 日期 desc));
优化过程:其实.......
优化之后如下
select months_between(to_date (select 日期
from t
where 成绩 < 3
and rownum = 1
order by 日期 desc, 'yyyymm'),
to_date('201306', 'yyyymm'));
对于关键字rownum的理解
rownum可以理解为对每条记录的一个标号
select * from lccont where rownum between 1 and 4 and conttype='2'
select * from (select rownum rn,t.* from lccont t) m where m.conttype='2' and m.rn between 1 and 4
两种效果都一样。
但第二种多了一列行号,可以区分出没有主键时,具有相同字段值的不同记录。
两种比较
.....
相关文章推荐
- 向优秀的效率类应用学习--智能日历应用(Cal和Sunrise)
- J2EE开发教程集汇/J2EE系列开发经典书籍/从入门到精通/权威指南
- [Leetcode] Gray Code (Java)
- Java正则表达式中的十大问题
- “借鸡生蛋”九大技巧
- 配置ASA实现内网、DMZ和外网的访问
- J2EE系列开发帮助文档/电子书籍/史上最全API集汇/开发必备工具
- 用OpenSceneGraph实现的NeHe OpenGL教程 - 第一课
- C++ 构造过程和析构过程
- MFC在共享DLL中使用和在静态库中使用的一些问题
- AGC与一次调频的区别、AGC与AVC的区别
- jQuery 入门教程(43): jQuery UI Tooltip 示例
- 机器学习&数据挖掘笔记_15(关于凸优化的一些简单概念)
- jQuery 入门教程(42): jQuery UI Tab 示例(二)
- C语言内存分配时的栈和堆
- jQuery 入门教程(41): jQuery UI Tab 示例(一)
- android中viewpager,scrollview、listview的嵌套问题
- oracle count(*) 和count(列)性能
- 让服务器iis支持.apk文件下载的设置方法
- Ubuntu软年包管理基本命令