题解 | 牛客每个人最近的登录日期(五)

牛客每个人最近的登录日期(五)

https://www.nowcoder.com/practice/ea0c56cd700344b590182aad03cc61b8

-- 使用 CTE 计算每个用户的首次登录日期
WITH first_login AS (
    SELECT 
        user_id,
        MIN(date) AS first_login_date
    FROM 
        login
    GROUP BY 
        user_id
),
-- 使用 CTE 计算每个用户前一天的登录日期
previous_day_login AS (
    SELECT 
        user_id,
        DATE_ADD(date, INTERVAL -1 DAY) AS prev_date
    FROM 
        login
)
-- 主查询计算每日比例
SELECT 
    l.date,
    IFNULL(
        ROUND(
            SUM(
                CASE 
                    WHEN fl.user_id IS NOT NULL AND pdl.user_id IS NOT NULL 
                    THEN 1 
                    ELSE 0 
                END
            ) / SUM(
                CASE 
                    WHEN fl.user_id IS NOT NULL 
                    THEN 1 
                    ELSE 0 
                END
            ), 
            3
        ), 
        0
    ) AS p
FROM 
    login l
-- 左连接首次登录日期
LEFT JOIN first_login fl ON l.user_id = fl.user_id AND l.date = fl.first_login_date
-- 左连接前一天登录日期
LEFT JOIN previous_day_login pdl ON l.user_id = pdl.user_id AND l.date = pdl.prev_date
GROUP BY 
    l.date
ORDER BY 
    l.date;

全部评论

相关推荐

10-27 02:29
已编辑
门头沟学院 嵌入式工程师
牛客72783561...:简历不是这么写的,你这两个项目只说了用到了什么技术,却没说取得了什么成果,在我看来这就是你自己做的一个demo,没有价值。你为什么不写你电赛国二的那个项目?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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