题解 | #某宝店铺连续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()分组聚合一次,即可得到“最大连续登录天数”。

全部评论

相关推荐

内向的柠檬精在研究求...:这不才9月吗,26到明年毕业前能一直找啊,能拿下提前批,转正的,offer打牌的都是有两把刷子的,为什么非要跟他们比。如果别人是9本硕+金牌+好几段大厂实习呢?如果别人是双非通天代呢?如果别人是速通哥呢?,做好自己就行了,我们做不到他们一样提前杀死比赛,但晚点到终点也没啥关系吧
双非应该如何逆袭?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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