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

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

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

WITH UserActivity AS (
    SELECT 
        uid
    FROM 
        exam_record
    WHERE 
        YEAR(start_time) = 2021
    GROUP BY 
        uid
    HAVING 
        COUNT(DISTINCT DATE(start_time)) > 1
),
TimeWindows AS (
    SELECT 
        uid,
        start_time,
        DATEDIFF(
            LEAD(start_time) OVER (PARTITION BY uid ORDER BY start_time), 
            start_time
        ) + 1 AS sdays_window
    FROM 
        exam_record
    WHERE 
        YEAR(start_time) = 2021
),
TotalAttempts AS (
    SELECT
        uid,
        COUNT(*) AS total_attempts
    FROM
        exam_record
    WHERE
        YEAR(start_time) = 2021
    GROUP BY
        uid
)

SELECT
    tw.uid,
    MAX(tw.sdays_window) AS days_window,
    round(ta.total_attempts/(datediff(max(start_time),min(start_time))+1)*MAX(tw.sdays_window),2) AS avg_exam_cnt
FROM
    TimeWindows tw
JOIN
    UserActivity ua ON tw.uid = ua.uid
JOIN
    TotalAttempts ta ON tw.uid = ta.uid
GROUP BY
    tw.uid
ORDER BY
    days_window DESC,
    avg_exam_cnt DESC;
	
	不够简洁不过很通俗易懂版

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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