题解 | 查询连续登陆的用户
查询连续登陆的用户
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;
这道题应该很经典,多做笔记,加油

查看11道真题和解析