下面可以说是这类查询的一个模版SQL,如果大家在工作中碰到类似的问题,可以借助该SQL去解决,希望能帮助到大家。
- selectcount(1)
- from(selectt.*,rownumrnum
- from(selectt.quarter
- from表名t
- wheret.quarter<='201103'
- groupbyt.quarter
- orderbyt.quarterdesc)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
- andt.rnum=rownum
说明:季度存放格式201001,表示2010年1季度,以此类推。
另也可以使用row_number() over(order by t.quarter desc)减少一层select,代码如下:
- selectcount(1)
- from(selectrow_number()over(orderbyt.quarterdesc)rnum,
- t.quarter
- from表名t
- wheret.quarter<='201103'
- groupbyt.quarter
- orderbyt.quarterdesc)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
- andt.rnum=rownum;
至于rownum和row_number() 在使用上的区别,本人建议还是直接使用原生态的rownum,因为这样子的效率是最高的。