想把表中的数据按时间段进行分组显示,按天分组的话:group by trunc(alm_date),要是按2小时分组呢,不知道怎么做了~望高手指点~

解决方案 »

  1.   

    group by to_number(to_char(alm_date,'yyyymmddhh24'))-mod(to_number(to_char(alm_date,'hh24')),2)SQL> select to_char(sysdate,'yyyymmddhh24') from dual;
     
    TO_CHAR(SYSDATE,'YYYYMMDDHH24'
    ------------------------------
    2010111711SQL> select to_number(to_char(sysdate,'yyyymmddhh24'))-mod(to_number(to_char(sysdate,'hh24')),2) from dual;
     
    TO_NUMBER(TO_CHAR(SYSDATE,'YYY
    ------------------------------
                        2010111710
      

  2.   

    --minitoy这个就能满足,只是如果你想显示区段名称,那么可以这样做:
    --下面做个测试,测试数据伴随sysdate 变化with t as(
    select 100+level rid,'00000000'||(Mod(LEVEL,4)) client_version_code, LEVEL login_count,
    SYSDATE+LEVEL*24/3600 login_time from dual  
    connect by level<=30)
    SELECT   
    to_char(Min(login_time),'hh24')||'--'||to_char(Max(login_time),'hh24') 时间段,
    Sum(decode(client_version_code,'000000000',login_count)) 版本一,
    Sum(decode(client_version_code,'000000001',login_count)) 版本二,
    Sum(decode(client_version_code,'000000002',login_count)) 版本三,
    Sum(decode(client_version_code,'000000003',login_count)) 版本四,
    Sum(login_count) 总计
    from t
    GROUP BY to_number(to_char(login_time,'hh24'))-mod(to_number(to_char(login_time,'hh24')),2)
    ORDER BY 1 ;--结果:
    时间段   版本一  版本二  版本三  版本四   总计
    ---------------------------------------------------
    12--13    12      15      18       21     66
    14--15    48      51      54       57     210
    16--17    52      54      56       27     189