文章目录

  • 1. 题目
  • 2. 解题

1. 题目

表 Accounts:

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| id            | int     |
| name          | varchar |
+---------------+---------+
id 是该表主键.
该表包含账户 id 和账户的用户名.

表 Logins:

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| id            | int     |
| login_date    | date    |
+---------------+---------+
该表无主键, 可能包含重复项.
该表包含登录用户的账户 id 和登录日期.
用户也许一天内登录多次.

写一个 SQL 查询, 找到活跃用户的 id 和 name.

活跃用户是指那些至少连续 5 天登录账户的用户.

返回的结果表按照 id 排序.

结果表格式如下例所示:

Accounts 表:
+----+----------+
| id | name     |
+----+----------+
| 1  | Winston  |
| 7  | Jonathan |
+----+----------+Logins 表:
+----+------------+
| 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 |
+----+------------+Result 表:
+----+----------+
| id | name     |
+----+----------+
| 7  | Jonathan |
+----+----------+
id = 1 的用户 Winston 仅仅在不同的 2 天内登录了 2 次,
所以, Winston 不是活跃用户.id = 7 的用户 Jonathon 在不同的 6 天内登录了 7 次,
6 天中有 5 天是连续的, 所以, Jonathan 是活跃用户.

后续问题:
如果活跃用户是那些至少连续 n 天登录账户的用户, 你能否写出通用的解决方案?

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/active-users
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

参考阅读 MYSQL实现排名函数RANK,DENSE_RANK和ROW_NUMBER

  • select id, login_date, dense_rank() over(partition by id order by login_date) rnk from Logins
{"headers": ["id", "login_date", "rnk"],
"values": [
[1, "2020-05-30", 1],
[1, "2020-06-07", 2],
[7, "2020-05-30", 1],
[7, "2020-05-31", 2],
[7, "2020-06-01", 3],
[7, "2020-06-02", 4],
[7, "2020-06-02", 4],
[7, "2020-06-03", 5],
[7, "2020-06-10", 6]]}
  • group by id, date_sub(login_date, interval rnk day),连续登录日期减去rank就都一样了,统计记录条数是否大于5
# Write your MySQL query statement below
with table1 as
(select id, login_date, dense_rank() over(partition by id order by login_date) rnkfrom Logins
) # 建立表名select distinct table1.id, name
from table1 left join Accounts a
on table1.id = a.id
group by id, date_sub(login_date, interval rnk day)
having count(distinct login_date) >= 5
order by id

我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode MySQL 1454. 活跃用户(连续dense_rank排名函数)相关推荐

  1. mysql怎么查出用户连续签到_连续签到奖励 数据库如何设计?

    -- 签到表设计 drop table if exists `t_user_sign`; create table `t_user_sign`( `sign_code` int(8) auto_inc ...

  2. mysql 实现查询用户连续登录的最大天数

    一.创建测试表 create table tmp_bzs_0526( id VARCHAR(100) comment 'id', pday VARCHAR(100) comment 'pday' ); ...

  3. LeetCode MySQL解题目录

    已完成的 LeetCode MySQL 数据库题目.点击查看我的 LeetCode 算法解题目录. 已解决 123/123 - 简单 54 中等 51 困难 18 前置入门学习 MySQL 基本查询. ...

  4. 在MySQL中实现Rank高级排名函数

    在MySQL中实现Rank高级排名函数 前言 用例表 1.在MySQL中实现普通排名 2.在MySQL中实现并列连续序号排名 3.在MySQL中实现并列非连续序号排名 4.随机获得一条数据 5.判断数 ...

  5. hive窗口函数之排名函数row_number、rank和dense_rank

    文章目录 简单排名 分组排名 练习1-取前两名学生 练习2-连续签到次数 排名函数主要有row_number.rank和dense_rank. 简单排名 row_number是行号,不会重复,rank ...

  6. mysql 排名_学会在MySQL中实现Rank高级排名函数,所有取前几名问题全部解决.

    MySQL中没有Rank排名函数,当我们需要查询排名时,只能使用MySQL数据库中的基本查询语句来查询普通排名.尽管如此,可不要小瞧基础而简单的查询语句,我们可以利用其来达到Rank函数一样的高级排名 ...

  7. mysql rank_在MySQL中实现Rank高级排名函数

    MySQL中没有Rank排名函数,当我们需要查询排名时,只能使用MySQL数据库中的基本查询语句来查询普通排名.尽管如此,可不要小瞧基础而简单的查询语句,我们可以利用其来达到Rank函数一样的高级排名 ...

  8. rank()函数 mysql_在MySQL中实现Rank高级排名函数

    在MySQL中实现Rank高级排名函数 MySQL中没有Rank排名函数,当我们需要查询排名时,只能使用MySQL数据库中的基本查询语句来查询普通排名.尽管如此,可不要小瞧基础而简单的查询语句,我们可 ...

  9. LeetCode MySQL 1141. 查询近30天活跃用户数

    文章目录 1. 题目 2. 解题 1. 题目 活动记录表:Activity +---------------+---------+ | Column Name | Type | +---------- ...

最新文章

  1. [WebService]之代码优先方法与契约优先方法
  2. Python测试框架pytest(04)fixture - 测试用例调用fixture、fixture传递测试数据
  3. 人人直播带货的时代,推荐模型为什么比不过李佳琦们?
  4. [EXP]windows全版本SMB溢出工具加强版
  5. 初涉c#设计模式-proxy pattern-从中国足球黑哨开始
  6. 网络001 交换机基本配置
  7. JfreeChart(八)之甘特图
  8. 纯电动SUV哪吒U Pro即将上线:最高续航610公里
  9. Python程序-打印单词的菱形字符图案
  10. Python源码深度解析—float类型对象
  11. Android之崩溃日志本地存储与远程保存
  12. VMware ESXi6.0注入8060阵列卡驱动过程记录
  13. 大数据学习——Hadoop本地模式搭建
  14. 图解 OSPF :什么是 LSA ?
  15. echart 折线图设置y轴单位_Echarts自定义Y轴
  16. 乱花渐欲迷人眼的C编译器中,谁才是“编译之王”?
  17. python实现双色球_python实现双色球随机选号
  18. Android 解压 Zip 压缩文件
  19. EXCEL的VBA编程基础1
  20. Flutter 汉字标点符号(逗号、顿号等)底部没对齐的问题处理

热门文章

  1. 解决pycharm运行Flask指定ip、端口更改无效
  2. 【linux】Ubuntu 18.04 设置桌面快捷启动方式
  3. python中tkinter的使用-中
  4. 常用的几种卷积神经网络介绍
  5. linux中的信号2——进程如何处理信号?
  6. 20180209-shutil模块
  7. IO流--buffer
  8. cmds在线重定义增加列
  9. hihoCoder #1143 : 骨牌覆盖问题·一
  10. 羽毛球 机器人 Robocon 2015 泰国预选赛(全国大学生机器人竞赛)