我一个表里面的时间格式是varchar 型的 时间到小时 现在怎么分包按 月 季度 年 进行group by
谢谢 各位高手,大虾!!!

解决方案 »

  1.   

    group by是可以加条件的,因此按月好做。
    group by substr(rq,1,6)就可以了,这里假设你的时间是yyyymmddhh24的了。。具体的自己改。按季度也是这个思路,但麻烦的是季度怎么算,条件比较杂,简单的办法就是两层group by
    select rq,count(*) from 
    (select rq,count(*) from tablename group by substr(rq,1,6))
    group by substr(rq,5,2) in ('01','02','03') or substr(rq,5,2) in ('04','05','06') or .....
    就是这个意思吧。
      

  2.   

    可以修改表结构么?表设计时可以把年月日时分秒都单独的存放,存int 型。。
    这样统计,计算 都很方便,并且性能还好。
      

  3.   

    with t as
     (select '2013030415' a
        from dual
      union all
      select '2012110409' from dual)
    select substr(t.a, 1, 4) 年,
           substr(t.a, 5, 2) 月,
           to_char(to_date(t.a, 'yyyymmddhh24'), 'Q') 季度,
           count(1) cnt
      from t
     group by substr(t.a, 1, 4),
              substr(t.a, 5, 2),
              to_char(to_date(t.a, 'yyyymmddhh24'), 'Q');