傅老师技巧:巧用rownum查询连续季度
2014-03-24 13:42
225 查看
下面可以说是这类查询的一个模版SQL,如果大家在工作中碰到类似的问题,可以借助该SQL去解决,希望能帮助到大家。
[sql]
view plaincopy
select count(1)
from (select t.*, rownum rnum
from (select t.quarter
from 表名 t
where t.quarter <= '201103'
group by t.quarter
order by t.quarter desc) t) t
where (to_number(substr('201103', 0, 4)) -
to_number(substr(t.quarter, 0, 4))) * 4 +
((to_number(substr('201103', 5, 6)) + 1 -
to_number(substr(t.quarter, 5, 6)))) = t.rnum
and t.rnum = rownum
说明:季度存放格式201001,表示2010年1季度,以此类推。
另也可以使用row_number() over(order by t.quarter desc)减少一层select,代码如下:
[sql]
view plaincopy
select count(1)
from (select row_number() over(order by t.quarter desc) rnum,
t.quarter
from 表名 t
where t.quarter <= '201103'
group by t.quarter
order by t.quarter desc) t
where (to_number(substr('201103', 0, 4)) -
to_number(substr(t.quarter, 0, 4))) * 4 +
((to_number(substr('201103', 5, 6)) + 1 -
to_number(substr(t.quarter, 5, 6)))) = t.rnum
and t.rnum = rownum;
至于rownum和row_number() 在使用上的区别,本人建议还是直接使用原生态的rownum,因为这样子的效率是最高的。
[sql]
view plaincopy
select count(1)
from (select t.*, rownum rnum
from (select t.quarter
from 表名 t
where t.quarter <= '201103'
group by t.quarter
order by t.quarter desc) t) t
where (to_number(substr('201103', 0, 4)) -
to_number(substr(t.quarter, 0, 4))) * 4 +
((to_number(substr('201103', 5, 6)) + 1 -
to_number(substr(t.quarter, 5, 6)))) = t.rnum
and t.rnum = rownum
说明:季度存放格式201001,表示2010年1季度,以此类推。
另也可以使用row_number() over(order by t.quarter desc)减少一层select,代码如下:
[sql]
view plaincopy
select count(1)
from (select row_number() over(order by t.quarter desc) rnum,
t.quarter
from 表名 t
where t.quarter <= '201103'
group by t.quarter
order by t.quarter desc) t
where (to_number(substr('201103', 0, 4)) -
to_number(substr(t.quarter, 0, 4))) * 4 +
((to_number(substr('201103', 5, 6)) + 1 -
to_number(substr(t.quarter, 5, 6)))) = t.rnum
and t.rnum = rownum;
至于rownum和row_number() 在使用上的区别,本人建议还是直接使用原生态的rownum,因为这样子的效率是最高的。
相关文章推荐
- 傅老师技巧:巧用rownum查询连续季度
- 巧用rownum查询连续季度
- Oracle--SQL技巧之一(查询连续的记录)
- oracle―SQL技巧之(一)连续记录查询sql案例测试
- Oracle 按年、月、日、周、季度连续查询
- SQL技巧之查询连续的记录
- oracle―SQL技巧之(一)连续记录查询sql案例测试
- jsp+mysql分页技巧:巧用limit 进行分页查询
- SQL学习之查询技巧 查询表是否存在的两种方法
- 数据查询优化技巧
- sql like 通配符 模糊查询技巧及特殊字符
- 选择时间段本周、本月、本季度、本年的条件来查询
- mybatis常用查询技巧1
- oracle按每天,每周,每月,每季度,每年查询统计数据
- C# Mysql 查询 Rownum的解决方法
- 项目总结之防止连续点击打开两个重复页面的技巧
- sql的各种查询技巧
- Excel技巧【标记多行数据连续一样的行】【第一个单元格公式适用于所有本列所有行】
- 查询优化的一些技巧
- [Oracle]高效的PL/SQL程序设计(一)--伪列ROWNUM使用技巧