有一个需求,需要统计相似最大的在线人数的功能,表设计如下:
其中 id为主键 user_id为用户id start_time为开始时间 end_time为结束时间
本人现在需要统计最大的在线人数和时间段
参考了http://blog.csdn.net/zhanghongju/article/details/8392817这篇文章
本人的sql是:
其中 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