当前位置: 首页 > article >正文

MySQL面试题--连续三天登录(困难)

一、准备工作

drop table if exists author_tb;
CREATE TABLE author_tb
(
    author_id    int(10) NOT NULL,
    author_level int(10) NOT NULL,
    sex          char(10) NOT NULL
);
INSERT INTO author_tb
VALUES
    (101, 6, 'm'),
    (102, 1, 'f'),
    (103, 1, 'm'),
    (104, 3, 'm'),
    (105, 4, 'f'),
    (106, 2, 'f'),
    (107, 2, 'm'),
    (108, 5, 'f'),
    (109, 6, 'f'),
    (110, 5, 'm');

drop table if exists answer_tb;
CREATE TABLE answer_tb
(
    answer_date date     NOT NULL,
    author_id   int(10) NOT NULL,
    issue_id    char(10) NOT NULL,
    char_len    int(10) NOT NULL
);

INSERT INTO answer_tb
VALUES
    ('2021-11-1', 101, 'E001', 150),
    ('2021-11-2', 101, 'E002', 200),
    ('2021-11-3', 101, 'E002', 201),
    ('2021-11-5', 101, 'E002', 201),
    ('2021-11-1', 101, 'E002', 201),
    ('2021-11-1', 101, 'E002', 201),
    ('2021-11-1', 101, 'E002', 201),
    ('2021-11-1', 101, 'E002', 201),
    ('2021-11-1', 101, 'E002', 201),
    ('2021-11-1', 102, 'C003', 50),
    ('2021-11-1', 103, 'P001', 35),
    ('2021-11-1', 104, 'C003', 120),
    ('2021-11-1', 105, 'P001', 125),
    ('2021-11-1', 102, 'P002', 105),
    ('2021-11-2', 101, 'P001', 201),
    ('2021-11-3', 101, 'P002', 211),
    ('2021-11-2', 101, 'P001', 211),
    ('2021-11-2', 115, 'P001', 211),
    ('2021-11-4', 115, 'P001', 211),
    ('2021-11-6', 115, 'P001', 211),
    ('2021-11-8', 115, 'P001', 211),
    ('2021-11-7', 116, 'P001', 211),
    ('2021-11-8', 116, 'P001', 211),
    ('2021-11-9', 116, 'P001', 211),
    ('2021-11-12', 116, 'P001', 211),
    ('2021-11-2', 110, 'C003', 200),
    ('2021-11-2', 110, 'C001', 225),
    ('2021-11-2', 110, 'C002', 220),
    ('2021-11-3', 101, 'C002', 180),
    ('2021-11-4', 109, 'E003', 130),
    ('2021-11-4', 109, 'E001', 123),
    ('2021-11-5', 108, 'C001', 160),
    ('2021-11-5', 108, 'C002', 120),
    ('2021-11-5', 110, 'P001', 180),
    ('2021-11-5', 106, 'P002', 45),
    ('2021-11-5', 107, 'E003', 56),
    ('2021-11-6', 107, 'E003', 56),
    ('2021-11-7', 120, 'E003', 56),
    ('2021-11-8', 120, 'E003', 56),
    ('2021-11-10', 120, 'E003', 56),
    ('2021-11-14', 120, 'E003', 56),
    ('2021-11-12', 120, 'E003', 56);

# 查询连续登录三天的人员信息

输入1:(展示了部分数据)

输入2: 

输出: 

二、分析 

 

三、实现 

with t as (                           -- 首先对id和时间进行去重操作
    select distinct
        answer_date,author_id
    from answer_tb           
), t1 as (                        --  对id进行分组然后对时间升序排序
    select
        answer_date,author_id,
        row_number() over (partition by author_id order by answer_date) rn
    from t
), t2 as(                           --  截取时间的天与排序求差值
    select
        author_id,
        rn,
        day(answer_date)-rn 差值
    from t1
), t3 as (                     --  对id和差值分组 聚合相同差值
    select
        author_id,
        差值,
        count(差值) 连续登录天数
    from t2
    group by author_id,差值
), t4 as (                                   --  加条件 聚合差值总数大于等于3 的
    select * from t3 where 连续登录天数 >=3
)
    select                                 --  左连接 
        t4.author_id,a.author_level,
        连续登录天数 
    from t4 
    left join author_tb a on a.author_id = t4.author_id;

四、总结

本题主要通过排序求差找出相同差值  ,id分组后差值相同的登录时间则为连续的;


http://www.kler.cn/news/310241.html

相关文章:

  • Python基础(七)——PyEcharts数据分析(面向对象版)
  • fortran定义数组
  • [SAP ABAP] 修改内表数据
  • HDMI色块移动——FPGA学习笔记13
  • VulhubDC-4靶机详解
  • Linux系统性能调优技巧详解
  • 『功能项目』回调函数处理死亡【54】
  • docker基础学习
  • C++调用C# DLL之踩坑记录
  • Oracle 数据库安装和配置教程
  • 每日学习一个数据结构-红黑树
  • 电脑怎么录屏?四款录屏工具分享
  • C++ | Leetcode C++题解之第416题分割等和子集
  • python简单易懂的lxml读取HTML节点及常用操作方法
  • 前端大模型入门:掌握langchain的核心Runnable接口(一)
  • 全面升级!最新版抖音蓝V商家采集软件,海量资源一网打尽
  • redis集群常用命令梳理
  • 高级java每日一道面试题-2024年9月17日-框架篇-什么是ORM框架?
  • C++---类与对象一
  • wpf 使用Oxyplot 库制作图表示例
  • QT 6.8 C++ snap库 连接西门子PLC
  • 激光雷达点云处理—学习随记
  • 「数据科学」清洗数据,真实数据集中缺失值的查看与处理
  • 高效开发,从暗藏玄机的文件系统开始—合宙Air201资产定位模组LuatOS
  • 产品经理学习笔记
  • scanf()函数的介绍及基础用法
  • 孙怡带你深度学习(1)--神经网络
  • wordpress主题摘要调用显示错误解决办法
  • 计算机毕业设计 家电销售展示平台的设计与实现 Java实战项目 附源码+文档+视频讲解
  • 无人机光电吊舱的技术!!