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

全部评论

相关推荐

希望各位大哥分享一下自己的看法,对于机器人行业确实不太了解
绝顶但不聪明:如果是机器人相关岗位,优先优必选(专门***器人的),其他岗位选小米
投递小米集团等公司10个岗位 > 牛客解忧铺 牛客在线求职答疑中心
点赞 评论 收藏
分享
孤寡孤寡的牛牛很热情:为什么我2本9硕投了很多,都是简历或者挂,难道那个恶心人的测评真的得认真做吗
点赞 评论 收藏
分享
微风不断:兄弟,你把四旋翼都做出来了那个挺难的吧
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务