巧用rownum查询连续季度

下面可以说是这类查询的一个模版SQL,如果大家在工作中碰到类似的问题,可以借助该SQL去解决,希望能帮助到大家。
  1. selectcount(1)
  2. from(selectt.*,rownumrnum
  3. from(selectt.quarter
  4. from表名t
  5. wheret.quarter<='201103'
  6. groupbyt.quarter
  7. orderbyt.quarterdesc)t)t
  8. where(to_number(substr('201103',0,4))-
  9. to_number(substr(t.quarter,0,4)))*4+
  10. ((to_number(substr('201103',5,6))+1-
  11. to_number(substr(t.quarter,5,6))))=t.rnum
  12. andt.rnum=rownum

说明:季度存放格式201001,表示2010年1季度,以此类推。

另也可以使用row_number() over(order by t.quarter desc)减少一层select,代码如下:

  1. selectcount(1)
  2. from(selectrow_number()over(orderbyt.quarterdesc)rnum,
  3. t.quarter
  4. from表名t
  5. wheret.quarter<='201103'
  6. groupbyt.quarter
  7. orderbyt.quarterdesc)t
  8. where(to_number(substr('201103',0,4))-
  9. to_number(substr(t.quarter,0,4)))*4+
  10. ((to_number(substr('201103',5,6))+1-
  11. to_number(substr(t.quarter,5,6))))=t.rnum
  12. andt.rnum=rownum;


至于rownum和row_number() 在使用上的区别,本人建议还是直接使用原生态的rownum,因为这样子的效率是最高的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值