题解 | #筛选限定昵称成就值活跃日期的用户#
筛选限定昵称成就值活跃日期的用户
http://www.nowcoder.com/practice/2ed07ff8f67a474d90523b88402e401b
要求:请找到昵称以『牛客』开头『号』结尾、成就值在1200~2500之间,且最近一次活跃(答题或作答试卷)在2021年9月的用户信息。
前两个条件用简单的where就能筛选,重点是最后一个条件。
最近一次考虑max函数,答题或作答试卷在两个表,考虑union连接后使得max(month)=202109.
最终代码:
select act.uid , nick_name , achievement
from (
select uid, exam_id , start_time as act_time #只要答题不管完成否都算活跃 所以用starttime
from exam_record er
union all
select uid, question_id , submit_time as act_time
from practice_record pr
) act #记得重命名表
join user_info ui on act.uid =ui.uid
where nick_name like '牛客%号' # 昵称以『牛客』开头『号』结尾
and achievement BETWEEN 1200 and 2500 # 成就值在1200~2500之间 between and 包含边界
group by act.uid
having max(DATE_FORMAT(act_time,'%Y%m'))=202109 #分组函数max不能放在where后 只能分组后筛选