【牛客】SQL147 筛选限定昵称成就值活跃日期的用户

发布于:2024-03-29 ⋅ 阅读:(66) ⋅ 点赞:(0)

描述

现有用户信息表user_info(uid用户ID,nick_name昵称, achievement成就值, level等级, job职业方向, register_time注册时间):

id uid nick_name achievement level job register_time
1 1001 牛客1号 1000 2 算法 2020-01-01 10:00:00
2 1002 牛客2号 1200 3 算法 2020-01-01 10:00:00
3 1003 进击的3号 2200 5 算法 2020-01-01 10:00:00
4 1004 牛客4号 2500 6 算法 2020-01-01 10:00:00
5 1005 牛客5号 3000 7 C++ 2020-01-01 10:00:00

试卷作答记录表exam_record(uid用户ID, exam_id试卷ID, start_time开始作答时间, submit_time交卷时间, score得分):

id uid exam_id start_time submit_time score
1 1001 9001 2020-01-02 09:01:01 2020-01-02 09:21:59 80
3 1001 9002 2021-02-02 19:01:01 2021-02-02 19:30:01 87
2 1001 9001 2021-05-02 10:01:01 (NULL) (NULL)
4 1001 9001 2021-06-02 19:01:01 2021-06-02 19:32:00 20
6 1001 9002 2021-09-01 12:01:01 (NULL) (NULL)
5 1001 9002 2021-09-05 19:01:01 2021-09-05 19:40:01 89
11 1002 9001 2020-01-01 12:01:01 2020-01-01 12:31:01 81
12 1002 9002 2020-02-01 12:01:01 2020-02-01 12:31:01 82
13 1002 9002 2020-02-02 12:11:01 2020-02-02 12:31:01 83
7 1002 9002 2021-05-05 18:01:01 2021-05-05 18:59:02 90
16 1002 9001 2021-09-06 12:01:01 2021-09-06 12:21:01 80
17 1002 9001 2021-09-06 12:01:01 (NULL) (NULL)
18 1002 9001 2021-09-07 12:01:01 (NULL) (NULL)
8 1003 9003 2021-02-06 12:01:01 (NULL) (NULL)
9 1003 9001 2021-09-07 10:01:01 2021-09-07 10:31:01 89
10 1004 9002 2021-08-06 12:01:01 (NULL) (NULL)
14 1005 9001 2021-02-01 11:01:01 2021-02-01 11:31:01 84
15 1006 9001 2021-02-01 11:01:01 2021-02-01 11:31:01 84

题目练习记录表practice_record(uid用户ID, question_id题目ID, submit_time提交时间, score得分):

id uid question_id submit_time score
1 1001 8001 2021-08-02 11:41:01 60
2 1002 8001 2021-09-02 19:30:01 50
3 1002 8001 2021-09-02 19:20:01 70
4 1002 8002 2021-09-02 19:38:01 70
5 1003 8002 2021-09-01 19:38:01 80

请找到昵称以『牛客』开头『号』结尾、成就值在1200~2500之间,且最近一次活跃(答题或作答试卷)在2021年9月的用户信息。

由示例数据结果输出如下:

uid nick_name achievement
1002 牛客2号 1200

解释:昵称以『牛客』开头『号』结尾且成就值在1200~2500之间的有1002、1004;

1002最近一次试卷区活跃为2021年9月,最近一次题目区活跃为2021年9月;1004最近一次试卷区活跃为2021年8月,题目区未活跃。

因此最终满足条件的只有1002。

with cte1 as(
    select uid,start_time as active_time from exam_record
    union all
    select uid,submit_time from practice_record
),
cte2 as(
    select uid
    from
        (select uid,active_time,
        dense_rank() over(partition by uid order by active_time desc) as time_rank
        from cte1)t
    where time_rank=1 and left(active_time,7)='2021-09'
)

select
uid,nick_name,achievement
from
cte2 left join user_info
using (uid)
where nick_name like '牛客%号' 
and achievement>=1200 and achievement<=2500

网站公告

今日签到

点亮在社区的每一天
去签到