17,377
社区成员
发帖
与我相关
我的任务
分享
--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
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'
------------------------------
2010111711
SQL> select to_number(to_char(sysdate,'yyyymmddhh24'))-mod(to_number(to_char(sysdate,'hh24')),2) from dual;
TO_NUMBER(TO_CHAR(SYSDATE,'YYY
------------------------------
2010111710