题解 | #某宝店铺连续2天及以上购物的用户及其对应的天数#

某宝店铺连续2天及以上购物的用户及其对应的天数

https://www.nowcoder.com/practice/63ac3be0e4b44cce8dd2619d2236c3bf

WITH t1 AS (
    SELECT
        user_id,
        sales_date,
        ROW_NUMBER() OVER (
            PARTITION BY
                user_id
            ORDER BY
                sales_date
        ) AS rk
    FROM
        sales_tb
),
t2 AS (
    SELECT
        user_id,
        sales_date - rk AS date_sub
    FROM
        t1
)
SELECT
    user_id,
    days_count
FROM
    (
        SELECT
            user_id,
            date_sub,
            COUNT(*) AS days_count
        FROM
            t2
        GROUP BY
            user_id,
            date_sub
        HAVING
            COUNT(*) >= 2
    ) b
ORDER BY
    user_id

非常典型的连续登录问题。先使用窗口函数得到每个用户登录时间排序的序号,再使用 登录日期-序号,如果存在连续登录的情况,则连续登录的这几天该差值是相同的。最后只需按照该差值分组聚合即可得到连续登录的天数。

另:如果存在连续登录之间有间隔的情况,可以再使用MAX()分组聚合一次,即可得到“最大连续登录天数”。

全部评论

相关推荐

hso_:哈哈哈哈哈哈我没offer一样在同一道题开喷了
投递深圳同为数码等公司10个岗位
点赞 评论 收藏
分享
头像
11-09 17:30
门头沟学院 Java
TYUT太摆金星:我也是,好几个华为的社招找我了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务