select a.course_id ,course_name, # 取出分组后的 in_datetime的time 要早于它开始的时间 count(distinct user_id) as online_num # 下面的having 已经筛选除了 # 上面的只需要计数 from course_tb a, attend_tb b where a.course_id = b.course_id and '19:00' BETWEEN DATE_FORMAT(in_datetime,'%H:%i') and DATE_FORMAT(out_datetime,'%H:%i') group by a.course_id,course_name # 请你统计直播开始时(19:00),各科目的在线人数 # and '19:00' BETWEEN DATE_FORMAT(in_datetime,'%H:%i') and DATE_FORMAT(out_datetime,'%H:%i') order by a.course_id asc; /* 使用date_format(date,format)提取日期的情况较多,较少使用提取时间,这里补充一下提取格式: format 规定日期/时间的输出格式 %T 时间, 24-小时 (hh:mm:ss) %r 时间,12-小时(hh:mm:ss AM 或 PM) %H 小时 (00-23) %h 小时 (01-12) %i 分钟,数值(00-59) %S 秒(00-59) %s 秒(00-59) */ /* 第一种: 1 2 date_format(a.in_datetime,'%H:%i:%s') <= '19:00:00' date_format(a.out_datetime,'%H:%i:%s') >= '19:00:00' 第二种: 1 2 right(a.in_datetime,8) <= '19:00:00' right(a.out_datetime,8) >= '19:00:00' 第三种: 1 2 time(a.in_datetime) <= '19:00:00' time(a.out_datetime) >= '19:00:00' */