统计最多在线人数的sql

MySql 在路上 586次浏览
有一个需求,需要统计相似最大的在线人数的功能,表设计如下:

其中 id为主键 user_id为用户id start_time为开始时间 end_time为结束时间
本人现在需要统计最大的在线人数和时间段
参考了http://blog.csdn.net/zhanghongju/article/details/8392817这篇文章
本人的sql是:

SELECT
	t1.*, count(t1.`user_id`)
FROM
	testcy t1,
	testcy t2
WHERE
	t1.`start_time` < t2.`end_time`
AND t1.`end_time` > t2.`start_time`
GROUP BY
	t1.`user_id`,
	t1.`start_time`,
	t1.`end_time`;

得到的查询结果为:
实际应该得到的最大在线人数是3,但是由于用户2在用户1的时间段里出现了两次在线的情况,导致最大值为5
讨教各位大佬,怎么样获取正确的查询结果

解决方案

90

看看那这样对不

SELECT
	t1.*, (SELECT count(DISTINCT `user_id`) 
from testcy t2 where  t1.`start_time` <= t2.`start_time`
AND t1.`end_time` >= t2.`end_time`) as 在线人数
FROM
	testcy t1


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明统计最多在线人数的sql
喜欢 (0)or分享 (0)