日期:2014-05-16  浏览次数:20889 次

请教一个统计语句或者解决办法
现有一张网民上下机日志表 pblog_clientlist
表机构如下:
id 主键
service_code 网吧编号
user_name 上网人员姓名
certificate_code 身份证号
online_time 上机时间
offline_time 下机时间

示例数据
id service_code user_name certificate_code online_time offline_time  
1 61040310556995 a 1111111111111111 2011-12-05 12:23:00 2011-12-05 13:00:00
2 61040310556995 b 2222222222222222 2011-12-05 12:21:00 2011-12-05 13:05:00
3 61040310556996 a 1111111111111111 2011-12-05 13:23:00 2011-12-05 14:02:00
4 61040310556996 b 2222222222222222 2011-12-05 13:25:00 2011-12-05 14:00:00
5 61040310556995 c 3333333333333333 2011-12-05 15:53:00 2011-12-05 18:40:00
6 61040310556995 d 4444444444444444 2011-12-05 16:38:00 2011-12-05 17:30:00

需求说明:
现在需要查询网民的同时换场记录
1、如数据中的a和b在网吧61040310556995同时上机,然后同时下机(上下机前后相差5分钟内就算同时)
2、然后a和b换到网吧61040310556996再同时上机,同时下机
3、以上的1-4条记录即表示a和b同时换场,现在需要查询这样的记录,5-6条记录不算同时换场

各位帮忙给点思路或者解决方案。。。。纠结很久了。。。万分感谢!

------解决方案--------------------
即查询在一个网吧,上机时间相差5分钟,同时下机时间也相差5分钟。
然后,这2个或多个人,在另一网吧也同时上机相关5分钟,同时下机时间也只相差5分钟的,网民。
是这个意思不?
------解决方案--------------------
select t1.* 
from pblog_clientlist t1, pblog_clientlist t2
 where t1.service_code = t2.service_code
and t1.user_name <> t2.user_name
and abs(t1.online_time - t2.online_time)*24*60 <= 5
and abs(t1.offline_time - t2.offline_time)*24*60 <= 5
------解决方案--------------------
探讨
pblog_clientlist的数据量会非常大,千万级的数据量。通常会限定到一个月的查询范围,但是数据量也会到百万级。这种联合方式会不会很好时。。。

------解决方案--------------------
你这是在国家安全部门做东西是不