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

查询连续登陆的用户

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

-- 先为新注册用户的登录时间作一个排序,按照客户id来分组,按照登录时间升序排列
WITH temp AS (
    SELECT
        l.user_id,
        DATE(l.log_time) AS log_date, 
        ROW_NUMBER() OVER(PARTITION BY l.user_id ORDER BY DATE(l.log_time) ASC) AS rn
    FROM login_tb l
    INNER JOIN register_tb r
        ON r.user_id = l.user_id
),
-- 用登录日期减去以排序数为天数,
temp2 AS (
    SELECT
        user_id,
        DATE_SUB(log_date, INTERVAL rn DAY) AS ref_date
    FROM temp
)
-- 这里去重是因为有客户多次连续登录,按照客户id分组,如果客户组里计数大等于3,那么这就是目标客户
-- 筛选条件就是一个客户id和三次同样的基准日,满足的话就记录一次
SELECT 
    DISTINCT user_id
FROM temp2
GROUP BY 
    user_id, 
    ref_date
HAVING COUNT(*) >= 3
ORDER BY 
    user_id ASC;

这道题应该很经典,多做笔记,加油

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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