select r.room_id, r.room_name, count(distinct u.user_id) as user_count from room_info_tb r left join user_view_tb u on r.room_id = u.room_id where in_time <= '23:59:59' and out_time >= '23:00:00' group by r.room_id, r.room_name order by user_count desc
关键部分:where 中in_time与out_time时间范围的确定。
若23:00-24:00在线,则有以下几种情况:
- 进入:23:00之前
- 退出:23:00-24:00之间
- 退出:24:00之后
- 进入:23:00-24:00之间
- 退出:23:00-24:00之间
- 退出:24:00之后
- 进入:24:00之后,不满足条件
综上所述,可得到时间范围为:in_time <= '23:59:59' and out_time >= '23:00:00'
(注意,需要使用distinct u.user_id进行人数统计,因为可能存在用户反复进入直播间的情况)