题解 | 查询连续登陆的用户

查询连续登陆的用户

https://www.nowcoder.com/practice/9944210610ec417e94140ac09512a3f5

with
    login_temp as (
        select
            login.user_id,
            date_format(log_time, '%Y-%m-%d') as log_date
        from
            login_tb login 
        inner join register_tb regis on login.user_id = regis.user_id 
        where datediff(reg_time,log_time) <= 1
        group by
            user_id,
            log_date
    ),
    login_continue as (
        select
            user_id,
            date_sub(
                log_date,
                interval row_number() over (
                    partition by
                        user_id
                    order by
                        log_date
                ) day
            ) as continue_day
        from
            login_temp
    )
select
    user_id
from
    login_continue
group by
    user_id, continue_day
having
    count(1) >= 3
order by
    user_id

思路:

①分析怎么才算新用户,可以理解为注册不超过24小时的用户,因此要做关联,筛选出新用户:where datediff(reg_time,log_time) <= 1

②如何排除一天之内多此登录:这个思路就是将登陆日期做截取,只保留年月日,再根据user_id和年月日进行分组(也可以去重)就可以排除一天之内连续登录的数据。group by user_id, log_date

剩下的就按照最长登陆时间的思路,用“截取后的年月日”-“年月日排名”即可。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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