SQL面试题练习 —— 统计最大连续登录天数区间

目录

  • [1 题目](#1 题目)
  • [2 建表语句](#2 建表语句)
  • [3 题解](#3 题解)

1 题目

2 建表语句

sql 复制代码
CREATE TABLE IF NOT EXISTS user_login_tb (
    uid INT,
    login_date DATE
);
insert into user_login_tb(uid, login_date) values
	( 1, '2022-08-02')
	,(1, '2022-08-03')
	,(2, '2022-08-03')
	,(2, '2022-08-04')
	,(2, '2022-08-05')
	,(2, '2022-08-05')
	,(3, '2022-08-05')
	,(2, '2022-08-06')
	,(4, '2022-08-06')
	,(4, '2022-08-07');

3 题解

sql 复制代码
WITH t AS (SELECT uid,
                  login_date,
                  ROW_NUMBER() OVER (PARTITION BY uid ORDER BY login_date) AS rn
           FROM user_login_tb
           group by uid, login_date -- 一个用户一天可能多次登录
)
SELECT part                AS days_range,
       COUNT(DISTINCT uid) AS user_num
FROM (SELECT uid,
             dd,
             COUNT(*) AS cnd,
             CASE
                 WHEN COUNT(*) < 2 THEN '未连续登录'
                 WHEN COUNT(*) < 4 THEN '连续登录2~3天'
                 WHEN COUNT(*) < 8 THEN '连续登录4~7天'
                 ELSE '连续登录大于7天'
                 END  AS part
      FROM (SELECT *,
                   DATE_SUB(login_date, rn) AS dd
            FROM t) t1
      GROUP BY uid, dd) t2
GROUP BY part
-- 记住sql的执行顺序
-- FROM -> JOIN -> ON -> WHERE -> GROUP BY -> HAVING -> SELECT -> DISTINCT -> ORDER BY -> LIMIT
ORDER BY user_num DESC;

执行结果

相关推荐
心易行者2 分钟前
用html在线运行做数据可视化大屏,5个实战场景从入门到上线
大数据·前端·数据库·人工智能·python
꯭自꯭闭꯭27 分钟前
达梦(DM8)安装测试
linux·运维·服务器·数据库
袁因38 分钟前
Oracle 慢 SQL 优化:Cost 最高的那行不是瓶颈,真凶藏在 SELECT 列表里
数据库
天衍四九-1 小时前
Agent Skills从入门到工程化(十六):面试中如何讲清楚 Agent Skills?
大数据·数据库·人工智能·python·chatgpt·面试
H_oRIZoN_1 小时前
Linux入门DAY37(IO 多路复用、TCP 并发服务器与数据库 SQLite3 详解)
linux·服务器·数据库
2501_930472441 小时前
05_数据库迁移腾讯云_DTS评估与预检回滚清单
数据库·云计算·腾讯云
三8441 小时前
SSRF 从入门到实战(下篇):gopher 打 Redis 实现 RCE
数据库·redis·缓存
承渊政道2 小时前
从GB到TB:KFS如何实现高吞吐、有序的异构增量同步
数据库·kingbase·延迟优化·kfs·数据量级优化
广州灵眸科技有限公司2 小时前
灵眸科技EAI3572-Core-L核心板即将发布!八核+4TOPS NPU,面向工业与边缘AI
linux·运维·服务器·数据库·yolo