LeetCode MySQL 1454. 活跃用户(连续dense_rank排名函数)
发布日期:2021-07-01 03:30:27
浏览次数:2
分类:技术文章
本文共 2102 字,大约阅读时间需要 7 分钟。
文章目录
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. 解题
参考阅读
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 belowwith table1 as( select id, login_date, dense_rank() over(partition by id order by login_date) rnk from Logins) # 建立表名select distinct table1.id, namefrom table1 left join Accounts a on table1.id = a.idgroup by id, date_sub(login_date, interval rnk day)having count(distinct login_date) >= 5order by id
我的CSDN
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
转载地址:https://michael.blog.csdn.net/article/details/107670499 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2024年04月18日 19时02分42秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
PermGen space-永久区内存溢出
2019-05-01
Maven继承和聚合
2019-05-01
Apache Kafka:优化部署的 10 种最佳实践
2019-05-01
Leetcode 35. 搜索插入位置 c#
2019-05-01
[9] JMeter-常用函数的使用
2019-05-01
[12] JMeter-结果分析之图形图表
2019-05-01
使用aspose.words 18.6实现pdf文档转换
2019-05-01
Java数组详解
2019-05-01
vs中动态DLL与静态LIB工程中加入版本信息的方法
2019-05-01
大数据分析技术与应用一站式学习(值得收藏)_v20200418
2019-05-01
Qt 在windows下的串口读写
2019-05-01
SpringApplication执行流程
2019-05-01
自定义Starter
2019-05-01
分布式事务原理探究(一)
2019-05-01
spring cloud consul 应用的多实例名的解决
2019-05-01
人工智能为什么这么火?看看安防江湖30年血战就知道了
2019-05-01
“前端智能为安防产生新的数据价值”
2019-05-01
(8)CMake入门笔记--CMake语法
2019-05-01
头文件中 #ifndef---#define---#endif的作用
2019-05-01