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

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

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

WITH user_dates AS (
    SELECT 
        uid, 
        DATE(start_time) AS exam_date
    FROM exam_record 
    WHERE YEAR(start_time) = 2021
),
filtered_users AS (
    SELECT uid 
    FROM user_dates 
    GROUP BY uid 
    HAVING COUNT(DISTINCT exam_date) >= 2 
),
sorted_dates AS (
    SELECT 
        uid,
        exam_date,
        LAG(exam_date) OVER (PARTITION BY uid ORDER BY exam_date) AS prev_date
    FROM user_dates 
    WHERE uid IN (SELECT uid FROM filtered_users)
),
max_diff_per_user AS (
    SELECT 
        uid,
        MAX(DATEDIFF(exam_date, prev_date)) AS max_diff
    FROM sorted_dates 
    WHERE prev_date IS NOT NULL 
    GROUP BY uid 
),
user_stats AS (
    SELECT 
        er.uid,
        COUNT(*) AS total_cnt,
        DATEDIFF(MAX(DATE(er.start_time)), MIN(DATE(er.start_time))) + 1 AS total_days 
    FROM exam_record er 
    WHERE YEAR(er.start_time) = 2021 
        AND er.uid IN (SELECT uid FROM filtered_users)
    GROUP BY er.uid 
)
SELECT 
    m.uid,
    (m.max_diff + 1) AS days_window,
    ROUND( (s.total_cnt / s.total_days) * (m.max_diff + 1), 2 ) AS avg_exam_cnt 
FROM max_diff_per_user m 
JOIN user_stats s ON m.uid = s.uid 
ORDER BY days_window DESC, avg_exam_cnt DESC;

全部评论

相关推荐

渴望wlb的牛油果很...:直说卡第一学历不就行了 非得拐弯抹角
点赞 评论 收藏
分享
Java转测开第一人:这种就是饼 把应届当廉价劳动力用完然后丢掉
你觉得今年秋招难吗
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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