一、简介
连续登录问题,是一个经典 sql,本文从易到难,简单拓展,有更好方法的同学,欢迎私下交流
二、表结构(去过重的)
CREATE TABLE `user_login`( `id` int COMMENT '用户主键', `dt` string COMMENT '登录日期')
三、表数据
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
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于