题解 | #最长连续登录天数#

最长连续登录天数

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

with
    rk_tb AS (
        SELECT
            user_id,
            fdate,
            DENSE_RANK() OVER (
                PARTITION BY
                    user_id
                ORDER BY
                    fdate
            ) rk
        FROM
            tb_dau
    ),
    diff_tb AS (
        SELECT
            user_id,
            fdate,
            rk,
            DATE_SUB(fdate, INTERVAL rk day) diff
        FROM
            rk_tb
    ),
    consecutive_day_tb AS (
        SELECT
            user_id,
            DENSE_RANK() OVER (
                PARTITION BY
                    user_id,
                    diff
                ORDER BY
                    fdate
            ) day
        FROM
            diff_tb
    )
SELECT DISTINCT 
    user_id,
    MAX(day)  max_consec_days
FROM consecutive_day_tb
GROUP BY user_id

强烈建议写一下SQL167,看下评论区大佬给的解题思路

  1. 创建日期排名:对每个用户的登录日期进行排名。这可以通过 DENSE_RANK() 函数实现。这样,你可以为每个用户的登录记录分配一个连续的排名值。
  2. 计算日期与排名的差异:通过计算每个登录日期和其对应排名之间的差异来帮助识别连续登录的天数。具体来说,可以通过 DATE_SUB 函数将日期减去排名值,从而得到一个相对的差异值。
  3. 识别连续的登录天数:基于上一步计算得到的差异值,将登录记录按用户和差异值进行分组。对每个分组内的登录日期进行排序,并为每个分组内的登录日期分配一个新的排名,这样可以识别连续的登录天数。
  4. 计算最长的连续登录天数:对每个用户的连续登录天数进行汇总,找出每个用户的最大连续登录天数。这可以通过计算每个用户的最大连续天数值来实现。

具体步骤总结:

  1. 为用户的每次登录计算排名:标记每个用户的登录日期的排名。
  2. 计算日期和排名之间的差值:确定日期差异,以识别连续的登录记录。
  3. 按差异值分组并计算连续登录天数:对每个用户按日期差异进行分组,并计算每个分组内的连续天数。
  4. 找到最长连续登录天数:从每个用户的连续登录天数中找出最大值。

通过以上步骤,你可以得到每个用户在指定日期范围内的最长连续登录天数。

全部评论

相关推荐

字节一直是我的白月光,考虑到转正还是拒了日常实习。
从明天开始狠狠卷JV...:为什么你释放的offer没流到我头上
点赞 评论 收藏
分享
06-15 02:05
已编辑
南昌航空大学 数据分析师
Eason三木:你如果想干技术岗,那几个发公众号合唱比赛的经历就去掉,优秀团员去掉,求职没用。然后CET4这种不是奖项,是技能,放到下面的专业技能里或者单独列一个英语能力。 另外好好改改你的排版,首行缩进完全没有必要,行间距好好调调,别让字和标题背景黏在一起,你下面说能做高质量PPT你得展现出来啊,你这简历排版我用PPT做的都能比你做的好。 然后自我评价,你如果要干数据工程师,抗压能力强最起码得有吧。
简历中的项目经历要怎么写
点赞 评论 收藏
分享
06-27 15:29
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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