题解 | #连续两次作答试卷的最大时间窗#

连续两次作答试卷的最大时间窗

https://www.nowcoder.com/practice/9dcc0eebb8394e79ada1d4d4e979d73c

#1.创建临时表t计算各记录对应的days_window和avg_exam_cnt,并筛选掉记录少于2和用户与考试不在2021年的记录
with t as(
        select
            uid,
            datediff(lead(start_time,1) over(partition by uid
                                             order by start_time asc),start_time)+1 as days_window,
            round(count(start_time) over(partition by uid)/(datediff(max(start_time) over(partition by uid), min(start_time) over(partition by uid))+1)*(datediff(lead(start_time,1) over(partition by uid       
                                             order by start_time asc),start_time)+1),2) as avg_exam_cnt
        from
            exam_record
        where
            uid in (
                select
                uid
                from
                exam_record
                group by 
                uid
                having
                count(distinct(date_format(start_time,'%Y%m%d')))>=2) and 
                start_time like '2021%'
),
#创建临时表t,以用户为固定窗口,对‘连续两次作答试卷的时间窗’排序,为后面选出每个人的最大时间窗做准备
b as (
    select
        uid,days_window,avg_exam_cnt,
       rank() over (partition by uid
                    order by days_window desc) as ranking
    from 
        t
    where
        avg_exam_cnt is not null)

#找出每个人ranking=1所对应的记录,得到最终结果,排序
select
    uid,days_window,avg_exam_cnt
from
    b
where
    ranking =1
order by
    days_window desc,avg_exam_cnt desc
   






 

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-25 17:26
点赞 评论 收藏
分享
06-20 17:42
东华大学 Java
凉风落木楚山秋:要是在2015,你这简历还可以月入十万,可惜现在是2025,已经跟不上版本了
我的简历长这样
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务