已知数据库结构如图所示:
client_version_code:版本号
login_count:访问量
login_time:访问的时间需求如下图:
根据时间统计今日版本1,版本2,版本3,的日访问量,以及目前3个版本的日访问量总计
根据时间统计昨日版本1,版本2,版本3,的日访问量,以及目前3个版本的日访问量总计
根据时间统计本周版本1,版本2,版本3,的日访问量,以及目前3个版本的日访问量总计
根据时间统计上周版本1,版本2,版本3,的日访问量,以及目前3个版本的日访问量总计
如下省略了,跟图一样(这个在潘迪的帮助下已经写好)。然后点击“本月”要能显示当月所有日期(到当前日期为止)的访问量如图:点击今日要能统计如图:0-1点钟:的版本访问量统计
1-2点钟:的版本访问量统计
一直显示到24小时;只求SQL统计语句。
client_version_code:版本号
login_count:访问量
login_time:访问的时间需求如下图:
根据时间统计今日版本1,版本2,版本3,的日访问量,以及目前3个版本的日访问量总计
根据时间统计昨日版本1,版本2,版本3,的日访问量,以及目前3个版本的日访问量总计
根据时间统计本周版本1,版本2,版本3,的日访问量,以及目前3个版本的日访问量总计
根据时间统计上周版本1,版本2,版本3,的日访问量,以及目前3个版本的日访问量总计
如下省略了,跟图一样(这个在潘迪的帮助下已经写好)。然后点击“本月”要能显示当月所有日期(到当前日期为止)的访问量如图:点击今日要能统计如图:0-1点钟:的版本访问量统计
1-2点钟:的版本访问量统计
一直显示到24小时;只求SQL统计语句。
比如
判断小时:To_Char(login_time,'hh24'))
case when 0<=to_number(To_Char(login_time,'hh24'))<1 then 1
when 1<=to_number(To_Char(login_time,'hh24'))<2 then 1
....
....
依次判断每个小时的登录数量
最后统计就是了应该不是很难
with t as(
select 100+level rid,'00000000'||(Mod(LEVEL,4)) client_version_code, LEVEL login_count,
SYSDATE-level login_time from dual
connect by level<=10)
select
To_Char(login_time,'yyyymmdd') 时间,
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_Char(login_time,'yyyymmdd');
select 100+level rid,'00000000'||(Mod(LEVEL,4)) client_version_code, LEVEL login_count,
SYSDATE+LEVEL/24/30 login_time from dual
connect by level<=10)
SELECT
CASE WHEN 0<=tm AND tm<1 THEN '0-1'
WHEN 1<=tm AND tm<2 THEN '1-2'
WHEN 2<=tm AND tm<3 THEN '2-3'
WHEN 3<=tm AND tm<4 THEN '3-4'
WHEN 4<=tm AND tm<5 THEN '4-5'
WHEN 5<=tm AND tm<6 THEN '5-6'
WHEN 6<=tm AND tm<7 THEN '6-7'
WHEN 7<=tm AND tm<8 THEN '7-8'
WHEN 8<=tm AND tm<9 THEN '8-9'
WHEN 9<=tm AND tm<10 THEN '9-10'
WHEN 10<=tm AND tm<11 THEN '10-11'
WHEN 11<=tm AND tm<12 THEN '11-12'
WHEN 12<=tm AND tm<13 THEN '12-13'
WHEN 13<=tm AND tm<14 THEN '13-14'
WHEN 14<=tm AND tm<15 THEN '14-15'
WHEN 15<=tm AND tm<16 THEN '15-16'
WHEN 16<=tm AND tm<17 THEN '16-17'
WHEN 17<=tm AND tm<18 THEN '17-18'
WHEN 18<=tm AND tm<19 THEN '18-19'
WHEN 19<=tm AND tm<20 THEN '19-20'
WHEN 20<=tm AND tm<21 THEN '20-21'
WHEN 21<=tm AND tm<22 THEN '21-22'
WHEN 22<=tm AND tm<23 THEN '22-23'
ELSE '23-24' END 时间 ,
版本一,版本二,版本三,版本四,总计
FROM (
SELECT
To_Number(To_Char(login_time,'hh24')) tm,
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_Char(login_time,'hh24')
);
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)
我把这段SQL语句去掉,然后把T改成表名称,查出来就是我想要的结果,顺便问一下这段SQL的意思,有点看不懂-_-!!!
这段SQL只是创建的临时表T,包含有测试数据。
一般我们用WITH 来创建一个临时的表,在数据库中是不存在的。
至于connect by level <=30这些只是创建数据的一个连接条件,你可以查看下Oracle文档,或者Google搜索 connect by 树状结构遍历 多的很
很多需要你慢慢学习的,我也在学习中……