巧用rownum查询连续季度
下面可以说是这类查询的一个模版SQL,如果大家在工作中碰到类似的问题,可以借助该SQL去解决,希望能帮助到大家。
-
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,代码如下:
-
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,因为这样子的效率是最高的
<!-- 正文结束 -->
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26267547/viewspace-1115722/
,如需转载,请注明出处,否则将追究法律责任。