题目

写一个 SQL 查询, 找到活跃用户的 id 和 name.
活跃用户是指那些至少连续 5 天登录账户的用户.
返回的结果表按照 id 排序.

Accounts 表:
id 是该表主键.
该表包含账户 id 和账户的用户名.

id name
1 Winston
7 Jonathan

Logins 表:
该表无主键, 可能包含重复项.
该表包含登录用户的账户 id 和登录日期. 用户也许一天内登录多次.

id login_date
7 2020-05-30
1 2020-05-30
7 2020-05-31
7 2020-06-01
7 2020-06-02
7 2020-06-02
7 2020-06-03
1 2020-06-07
7 2020-06-10

结果表格式如下例所示:

id name
7 Jonathan

id = 1 的用户 Winston 仅仅在不同的 2 天内登录了 2 次, 所以, Winston 不是活跃用户.
id = 7 的用户 Jonathon 在不同的 6 天内登录了 7 次, , 6 天中有 5 天是连续的, 所以, Jonathan 是活跃用户.


解法一 窗口函数lead +datediff

1)去重
因为登录表汇总了多个日期和id 号,同一天可能回登录多次,我们只需要一个登录日期。所以需要先group by id, login_date去重。
2)datediff +lead
再用lead(login_date,4)over()窗口函数查找往下第4个登录日期是否与当前日期相差4天,即连续5天。

select distinct t.id,a.name
from (selectid, login_date,datediff(lead(login_date, 4) over(partition by id order by login_date),login_date) as diff   from loginsgroup by id, login_date) as t
left join accounts a using(id)
where t. diff = 4

解法二:自连接

logins自连接后,限制条件有:
1) id 相同;
2)日期相差0-4天。
最后找出符合条件的日期合计达到5个的id。

如下表所示,如果有连续登录5天,那么在diff列在0-4范围内的会有5行。
连续登录5天的情况:

date date2 diff
t t 0
t t-1 1
t t-2 2
t t-3 3
t t-4 4

第二天没有登录的情况:

date date2 diff
t t 0
t t-1 1
t t-3 3
t t-4 4
select distinct a.id,a.name
from (select a.id, a.login_date as ad, b.login_date as bdfrom logins ajoin logins bon a.id = b.id and datediff(a.login_date,b.login_date) between 0 and 4group by a.id, a.login_datehaving count(distinct b.login_date) = 5) as t
left join accounts a on a.id = t.id

来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/active-users

SQL练习题:连续登录5天的活跃用户相关推荐

  1. SQL——最大连续登录天数、当前连续登录天数、最大连续未登录天数问题、连续登陆N天用户、连续座位号

    问题: 最大连续登录天数 当前连续登录天数 最大连续未登录天数 连续登陆3天用户(三种方法) 选出连续座位的编号 前三个问题所用数据: 原数据表:user_active表 表字段:用户.新增日期.活跃 ...

  2. Hive sql : 查询连续登录天数

    查询连续登录天数 1.问题描述 2.在Hive中建表 3.查询最大连续登录天数 1.问题描述 目前有两列数据,分别是用户ID和用户登录的时间,现需要统计用户连续登录的最大天数,中间如有断开,则不算连续 ...

  3. redis-bitmap实际运用统计用户登录天数和每天活跃用户

    redis bitmap实际运用一统计用户登录天数 第一个听需求如果你的公司有用户系统,有很多用户.然后这时候需求是什么? 统计未来用户的登录天数,且窗口随机.什么意思?比如说在电商的公司当中,电商的 ...

  4. LeetCode MySQL 1454. 活跃用户(连续dense_rank排名函数)

    文章目录 1. 题目 2. 解题 1. 题目 表 Accounts: +---------------+---------+ | Column Name | Type | +------------- ...

  5. mysql 连续登录天数

    已知表名:csdata,表中有两个字段:user_id,log_time 问:用户连续登录天数为3的是?. user_id log_time 111111 2022/12/12 00:00:00 11 ...

  6. 【MySQL】MySQL统计连续登录3天的用户

    需求 假设有下列表(user_login),第一列为id,第二列为登陆时间(dt),该表记录了每个id的登陆时间 现在要统计指定7天内连续登录3天以上的用户,结果如下 解决方案 由于存在同一用户同一天 ...

  7. Redis高级类型(统计全站访问量,日活跃用户)

    HyperLogLog(超级日志)(统计访客) 采用一种基数算法,用于完成独立总数的统计 占据空间小,无论统计多少个数据,只占12K的内存空间 不精确的统计算法,标准误差为0.81% Bitmap(位 ...

  8. redis位图法统计活跃用户+统计3天的连续登录用户案例

    Setbit 场景: 1亿个用户, 每个用户 登陆/做任意操作 ,记为今天活跃,否则记为不活跃 用法 周一:1001 0001 1001 0101 1011 0101 周二:1101 0001 101 ...

  9. SQL(之二)-查询“最长连续登录天数“

    0-创建表及插入测试数据 说明:本文主要想分享,如何查询"最长连续登录天数",具体的测试数据,可以自行添加. CREATE TABLE USER_LOGINFO( USER_ID ...

最新文章

  1. 如何才能做好绩效管理?
  2. 物联网概念升级,万物互联来袭
  3. codeforces 126B Password(哈希)
  4. 数据库连接池为什么要用threadlocal呢?(不用会怎样?)
  5. 首届Elastic社区技术大会隆重开幕!腾讯分享2场中文演讲
  6. 复制linux内核,linux内核写时复制机制源代码解读
  7. k6前级效果器怎么用_新手学习电吉他,效果器应选择单块还是综合?
  8. 20145309李昊《网络对抗》MSF应用基础
  9. 一些大厂的css reset 代码
  10. 深度学习2.0-5.tensorflow的基础操作之前向传播(张量)实战
  11. JAVA 项目中使用 H2 数据库
  12. 用台达PLC485通信控制11台英威腾变频启动停止速度设定
  13. android 设内网固定ip,如何给手机设置一个固定的内网ip
  14. CodeIgniter入门
  15. 计算机网络基础之互联网总结
  16. 使用fiddler实现苹果ios手机抓包
  17. IntelliJ IDEA破解版 2017.3.4 Ultimate下载安装和JetbrainsCrack-2.7.jar激活教程
  18. Error during export:Export job failed !
  19. 视觉系统:人类最重要的感觉
  20. Paper之EfficientDet: 《Scalable and Efficient Object Detection—可扩展和高效的目标检测》的翻译及其解读

热门文章

  1. 积水的城市(SPFA)
  2. STM32学习笔记1-----初识stm32F429IGT6
  3. 10-15 查询未登记成绩的学生(MSSQL)
  4. 在 LINQ to Entities 查询中无法构造实体或复杂类型
  5. 合肥三维动画公司,安徽地产企业宣传片,合肥做地产三维动画公司,蚌埠房地产制作公司,合肥产品三维动画公司
  6. Spark学习笔记(7)——RDD行动算子
  7. C#自动更新Excel报表而不改变原有样式(2021.8.11)
  8. wiiliam -学画彩虹
  9. 【重磅推荐】centos7新装系统基础环境配置流程【完整搬家基本软件安装】
  10. Loading class 'com.mysql.jdbc.Driver', This is deprecated. The new driver class is'com.cj.jdbc.Driv'