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

查询连续登陆的用户

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

select a.user_id
from(
    select b.user_id,
           date1,
           date_sub(date1,interval row_number()over(partition by user_id order by date1) day ) date2
           ---第二步子查询,用日期减去窗口函数的结果得到date2
    from(
        select lt.user_id, 
               substr(log_time,1,10) date1
        from login_tb as lt
        inner join register_tb as rt on lt.user_id=rt.user_id
        where substr(rt.reg_time,1,10) = '2022-02-08'
        group by user_id,substr(lt.log_time,1,10)---第一步查询,对user_id和日期去重
               

    ) b

) a

group by user_id,date2
having count(*) >=3
order by user_id
---第三步对user_id,date2先去重分组,用having筛选出大于3的
where--行过滤,未分组
having--组过滤,已分组

1,date_sub是sql中对日期做减法的函数,用法是date_sub(日期,interval 需要减的数 day)

2.substr函数 SUBSTR(string, start_position, length),用于截取字符串子串的函数,能从一个字符串里按指定位置和长度提取部分内容,常用于处理日期、文本等字符串数据

全部评论

相关推荐

牛牛不会牛泪:脉脉太多这种了,纯水军
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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