select qqq.ti,max(qqq.nn) max_uv from (select tu1.artical_id as ti,tu1.uid tui, count(*)+1 nn from tb_user_log tu1 join tb_user_log tu2 on tu1.artical_id=tu2.artical_id and tu1.uid!=tu2.uid where tu1.in_time between tu2.in_time and tu2.out_time or tu1.in_time between tu2.in_time and tu2.out_time group by tu1.artical_id,tu1.uid) as qqq group by qqq.ti order by max_uv desc

用一张表进行笛卡尔积 就可以完成了,join之后就可以想象同一片文章一个人的观看时间和其他人做对比,比如 join之后:alt 左边的用户就和右边的做时间比较 ,就是判断两个时间段是否有交集,没有交集的就过滤掉,比如A-A,A-B,A-C。他们都有交集,但是A-A肯定不算过滤掉,这样满足条件的就有两个人B,C ,加上自己就3个人了所以加一 具体看代码吧很简单