首页 > Linux操作系统 > Linux操作系统 > 对网游用户平均在线时间的统计
某网游公司对用户最近24小时的用户平均在线时间进行统计
用户登入、登出的记录统计如下表(Table_1)所示 :
time uid action
2009-06-10 21:29:19.733 user1 login
2009-06-10 21:29:54.123 user2 logout
2009-06-10 21:30:04.840 user1 logout
2009-06-10 21:30:20.140 user3 login
2009-06-10 21:30:38.200 user1 login
2009-06-13 09:44:38.107 user1 logout
2009-06-13 09:45:01.483 user1 login
2009-06-13 10:41:33.653 user1 logout
2009-06-13 10:41:44.327 user1 login
2009-06-13 10:10:49.293 user2 login
如下代码实现:
第一步 建立临时表
create table #t2
( uid varchar(10),
time1 datetime,
time2 datetime
)
insert into #t2
select a.uid,a.time as time1 , min(b.time) as time2 group by a.time,a.uid 查询临时表结果如下: 平均在线时间为 :
from
(select time,uid from Table_1 where action='login' ) a
left outer join (select time,uid from Table_1 where action='logout') b
on a.uid=b.uid and (a.time
having DATEDIFF(hh,a.time,GETDATE())<24
uid time1 time2
user1 2009-06-13 09:45:01.483 2009-06-13 10:41:33.653
user1 2009-06-13 10:41:44.327 NULL
user2 2009-06-13 10:10:49.293 NULL
第二步 对#t2求用户的平均在线时间
time2为空说明该用户当前仍在线
select sum(DATEDIFF(S,time1,ISNULL(#t2.time2,getdate())))/COUNT(uid)/60 as avg_times from #t2
avg_times
41
平均在线时间为41分钟
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/21775700/viewspace-606180/ ,如需转载,请注明出处,否则将追究法律责任。