一、简介
连续登录问题,是一个经典 sql,本文从易到难,简单拓展,有更好方法的同学,欢迎私下交流
二、表结构(去过重的)
三、表数据
user_login.id user_login.dt
1001 2021-12-12
1002 2021-12-12
1001 2021-12-13
1001 2021-12-14
1001 2021-12-16
1002 2021-12-16
1001 2021-12-19
1002 2021-12-17
1001 2021-12-20
四、需求: 求出连续 3 天登录的用户 id
方法一:自关联
SELECT
tmp2.id
FROM
(
SELECT
tmp.id,
tmp.dt
FROM
(
SELECT
ul1.id,
ul1.dt
FROM
user_login ul1
INNER JOIN
user_login ul2
ON ul1.id = ul2.id
WHERE
ul2.dt BETWEEN date_sub(ul1.dt, 2) AND ul1.dt
) tmp
GROUP BY
tmp.id,
tmp.dt
HAVING
count(1) = 3
) tmp2
group by
tmp2.id
详解:
1:因为是固定的 3 天,所以可以采用主键自关联方法,过滤条件为副表 ul2 的登录时间在主表登录时间和主表登录时间减去两天的区间内
2:然后根据主表的 id,和登录时间分组,分组后数量正好是 3 天的,说明连续三天时间都有登录
3:根据步骤二的结果去重,获取结果
更多内容请看:https://blog.stackanswer.com/articles/2022/02/25/1645775761185.html
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于