SQL面试题练习 —— 找出所有连续未登录5天及以上的用户并提取出这些用户最近一次登录的日期
目录
- 1 题目
- 2 建表语句
- 3 题解
1 题目
找出所有连续未登录5天及以上的用户并提取出这些用户最近一次登录的日期
样例数据
+---------------------+------------------------+--+
| user_login.user_id | user_login.login_date |
+---------------------+------------------------+--+
| 1 | 2022-01-01 |
| 1 | 2022-01-02 |
| 1 | 2022-01-03 |
| 1 | 2022-01-05 |
| 1 | 2022-01-06 |
| 1 | 2022-01-09 |
| 1 | 2023-01-01 |
| 2 | 2022-01-01 |
| 2 | 2022-01-03 |
| 2 | 2022-01-04 |
| 2 | 2022-01-06 |
| 2 | 2022-01-07 |
| 2 | 2022-01-08 |
| 3 | 2022-01-01 |
| 3 | 2022-01-02 |
| 3 | 2022-01-04 |
| 3 | 2022-01-05 |
| 3 | 2022-01-07 |
| 3 | 2022-01-08 |
+---------------------+------------------------+--+
2 建表语句
-- 创建用户登录数据表
CREATE TABLE user_login(user_id INT,login_date DATE
);-- 插入模拟数据
INSERT INTO user_login VALUES
(1, '2022-01-01'),
(1, '2022-01-02'),
(1, '2022-01-03'),
(1, '2022-01-05'),
(1, '2022-01-06'),
(1, '2022-01-09'),
(1, '2023-01-01'),
(2, '2022-01-01'),
(2, '2022-01-03'),
(2, '2022-01-04'),
(2, '2022-01-06'),
(2, '2022-01-07'),
(2, '2022-01-08'),
(3, '2022-01-01'),
(3, '2022-01-02'),
(3, '2022-01-04'),
(3, '2022-01-05'),
(3, '2022-01-07'),
(3, '2022-01-08');
3 题解
- 计算本次登录日期与上一次登录日期差值
select user_id,login_date,datediff(login_date, lag(login_date) over (partition by user_id order by login_date )) as dt
from user_login
执行结果
+----------+-------------+-------+--+
| user_id | login_date | dt |
+----------+-------------+-------+--+
| 1 | 2022-01-01 | NULL |
| 1 | 2022-01-02 | 1 |
| 1 | 2022-01-03 | 1 |
| 1 | 2022-01-05 | 2 |
| 1 | 2022-01-06 | 1 |
| 1 | 2022-01-09 | 3 |
| 1 | 2023-01-01 | 357 |
| 2 | 2022-01-01 | NULL |
| 2 | 2022-01-03 | 2 |
| 2 | 2022-01-04 | 1 |
| 2 | 2022-01-06 | 2 |
| 2 | 2022-01-07 | 1 |
| 2 | 2022-01-08 | 1 |
| 3 | 2022-01-01 | NULL |
| 3 | 2022-01-02 | 1 |
| 3 | 2022-01-04 | 2 |
| 3 | 2022-01-05 | 1 |
| 3 | 2022-01-07 | 2 |
| 3 | 2022-01-08 | 1 |
+----------+-------------+-------+--+
- 计算每个用户最近一次登录日期
select user_id,max(login_date) recent_login_date
from user_login
group by user_id
执行结果
+----------+--------------------+--+
| user_id | recent_login_date |
+----------+--------------------+--+
| 1 | 2023-01-01 |
| 2 | 2022-01-08 |
| 3 | 2022-01-08 |
+----------+--------------------+--+
- 合并上述两张表
select t1.user_id,t1.login_date,t1.dt,t2.user_id,t2.recent_login_date
from (select user_id,login_date,datediff(login_date, lag(login_date) over (partition by user_id order by login_date )) as dtfrom user_login) t1left join(select user_id,max(login_date) recent_login_datefrom user_logingroup by user_id) t2on t1.user_id = t2.user_id
执行结果
+-------------+----------------+--------+-------------+-----------------------+--+
| t1.user_id | t1.login_date | t1.dt | t2.user_id | t2.recent_login_date |
+-------------+----------------+--------+-------------+-----------------------+--+
| 1 | 2022-01-01 | NULL | 1 | 2023-01-01 |
| 1 | 2022-01-02 | 1 | 1 | 2023-01-01 |
| 1 | 2022-01-03 | 1 | 1 | 2023-01-01 |
| 1 | 2022-01-05 | 2 | 1 | 2023-01-01 |
| 1 | 2022-01-06 | 1 | 1 | 2023-01-01 |
| 1 | 2022-01-09 | 3 | 1 | 2023-01-01 |
| 1 | 2023-01-01 | 357 | 1 | 2023-01-01 |
| 2 | 2022-01-01 | NULL | 2 | 2022-01-08 |
| 2 | 2022-01-03 | 2 | 2 | 2022-01-08 |
| 2 | 2022-01-04 | 1 | 2 | 2022-01-08 |
| 2 | 2022-01-06 | 2 | 2 | 2022-01-08 |
| 2 | 2022-01-07 | 1 | 2 | 2022-01-08 |
| 2 | 2022-01-08 | 1 | 2 | 2022-01-08 |
| 3 | 2022-01-01 | NULL | 3 | 2022-01-08 |
| 3 | 2022-01-02 | 1 | 3 | 2022-01-08 |
| 3 | 2022-01-04 | 2 | 3 | 2022-01-08 |
| 3 | 2022-01-05 | 1 | 3 | 2022-01-08 |
| 3 | 2022-01-07 | 2 | 3 | 2022-01-08 |
| 3 | 2022-01-08 | 1 | 3 | 2022-01-08 |
+-------------+----------------+--------+-------------+-----------------------+--+
- 找出所有连续未登录5天及以上的用户
select t1.user_id,t2.recent_login_date
from (select user_id,login_date,datediff(login_date, lag(login_date) over (partition by user_id order by login_date )) as dtfrom user_login) t1left join(select user_id,max(login_date) recent_login_datefrom user_logingroup by user_id) t2on t1.user_id = t2.user_id
where t1.dt >= 5;
执行结果
+-------------+-----------------------+--+
| t1.user_id | t2.recent_login_date |
+-------------+-----------------------+--+
| 1 | 2023-01-01 |
+-------------+-----------------------+--+
相关文章:
SQL面试题练习 —— 找出所有连续未登录5天及以上的用户并提取出这些用户最近一次登录的日期
目录 1 题目2 建表语句3 题解 1 题目 找出所有连续未登录5天及以上的用户并提取出这些用户最近一次登录的日期 样例数据 ----------------------------------------------- | user_login.user_id | user_login.login_date | ---------------------------------------------…...
微深节能 煤码头自动化翻堆及取料集控系统 格雷母线
微深节能格雷母线高精度位移测量系统是一种先进的工业自动化位置检测解决方案,它被广泛应用于煤码头自动化翻堆及取料集控系统中,以实现对斗轮堆取料机等大型机械设备的精准定位和自动化控制。 系统原理简述: 格雷母线系统的工作原理基于电磁…...
CSS 背景添加白色小圆点样式
css也是开发过程中不可忽视的技巧 此专栏用来纪录不常见优化页面样式的css代码 效果图: 未添加之前: 代码: background: radial-gradient(circle at 1px 1px, #3d3c3c 2px, transparent 0);background-size: 20px 25px;...
【HTML入门】第一课 - 网页标签框架
这一节,我们说一下学习前端开发的话,最入门的也是非常重要的一门可成,也就是HTML。HTML标签,是网页的重要组成部分,可以说,你看到网页上的内容,都是基于HTML标签呈现出来的。 这一小节呢&#…...
【DevOps】Elasticsearch集群JVM参数调整及滚动重启指南
目录 概述 准备工作 滚动重启步骤 1. 禁用分片分配(可选) 2. 关闭索引写操作 3. 检查集群状态 4. 重启Master节点 5. 重启Data节点 6. 重新开启索引写操作 7. 启用分片分配(如果之前禁用了) 8. 监控集群状态 结论 概述…...
软设之多态
在面向对象的语言中,多态就是相同方法,不同的表现。 重写和重载时多态具体的表现形式。 重载,举个例子,有一个猫类,定义了一个叫的方法,正常叫的值是“喵喵”,愤怒时叫的值是“喵呜” 重写&a…...
SD NAND时序解析
一、SD NAND时序的重要性 在SD NAND的数据传输过程中,时序起着至关重要的作用。正确的时序确保了数据能够准确无误地在主机和SD NAND之间传输。 二、命令与读写时序 SD NAND的通信基于命令和数据传输,遵循以下时序规则: 命令与响应交互&…...
CSS-实例-div 水平居中 垂直靠上
1 需求 2 语法 3 示例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>表格水平居中、垂直靠上示例…...
数据分析入门指南:从基础概念到实际应用(一)
随着数字化时代的来临,数据分析在企业的日常运营中扮演着越来越重要的角色。从感知型企业到数据应用系统的演进,数据驱动的业务、智能优化的业务以及数智化转型成为了企业追求的目标。在这一过程中,数据分析不仅是技术的运用,更是…...
ArcGIS Pro三维空间分析、专题制图、遥感制图全流程系统教学
ESRI宣布:ArcGIS 10.8.2 是 ArcMap 的当前版本,在 2026 年 3 月 1 日之前将继续受支持。我们没有计划在 2021/22 年随 ArcGIS 版本一起发布 ArcMap 10.9.x。这意味着 10.8.x 系列将是 ArcMap 的最终版本系列,并将在 2026 年 3 月 1 日之前受支…...
Redis 7.x 系列【17】四种持久化策略
有道无术,术尚可求,有术无道,止于术。 本系列Redis 版本 7.2.5 源码地址:https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. 案例演示2.1 无持久化2.2 RDB2.3 AOF2.4 混合模式2.4.1 方式一:…...
开发经验:go切片的继承
package main import ( "errors" "fmt" ) // LimitedSlice 是一个封装了切片的结构体,用于限制切片的最大容量 type LimitedSlice struct { slice []int maxCap int } // NewLimitedSlice 创建一个新的LimitedSlice实例ÿ…...
PyQt5事件机制解析:从原理到实战一网打尽!
PyQt5事件机制 一、简介1.1 PyQt5的概述和作用 1.2 为什么学习PyQt5事件机制1.2.1 实现用户交互1.2.2 处理复杂逻辑1.2.3 自定义用户界面行为1.2.4 优化性能 二、PyQt5事件机制初步了解2.1 PyQt5事件的概念和基本原理2.1.1 PyQt5事件的概念2.1.2 PyQt5事件的基本原理 2.2 事件处…...
GraphQL与RESTful API的区别和优势
GraphQL GraphQL是一种用于API设计的语言和查询协议,由Facebook于2015年推出。它允许客户端向服务器指定他们需要的数据字段,而不是像RESTful API那样请求整个资源然后过滤数据。在GraphQL中,客户端发送一个单一的请求,而服务器返…...
关于 Qt4Qt5迁移至Qt6出现QDesktopWidget和QApplication::desktop()删除后兼容Qt6 的解决方法
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/140036861 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…...
【HarmonyOS NEXT】鸿蒙Socket 连接
简介 Socket 连接主要是通过 Socket 进行数据传输,支持 TCP/UDP/Multicast/TLS 协议。 基本概念 Socket:套接字,就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。TCP:传输控制协议(Transmission Control Proto…...
1978Springboot在线维修预约服务应用系统idea开发mysql数据库web结构java编程计算机网页源码maven项目
一、源码特点 springboot在线维修预约服务应用系统是一套完善的信息系统,结合springboot框架和bootstrap完成本系统,对理解JSP java编程开发语言有帮助系统采用springboot框架(MVC模式开发 ),系统具有完整的源代码和…...
【vue】实现自动轮播+滚轮控制
前言 有一个无缝轮播+滚轮控制的需求,找了很多的方法发现都没办法完美的实现这种效果。 用原生的js实现不是无缝滚动 用无缝滚动插件实现,发现pc端无法实现滚轮控制 目标 1 实现表格表无缝循环滚动 2 实现滚轮控制表格表数据滚动 3 掌握vue-seamless-scroll使用方式 一些思考…...
鸿翼FEX文件安全交换系统,打造安全高效的文件摆渡“绿色通道”
随着数字经济时代的到来,数据已成为最有价值的生产要素,是企业的重要资产之一。随着数据流动性的增强,数据安全问题也随之突显。尤其是政务、金融、医疗和制造业等关键领域组织和中大型企业,面临着如何在保障数据安全的同时&#…...
苹果电脑虚拟机运行Windows Mac环境安装Win PD19虚拟机 parallels desktop19虚拟机安装教程免费密钥激活
在如今多元的数字时代,我们经常需要在不同的操作系统环境下进行工作和学习。而对于 Mac 用户来说,有时候需要在自己的电脑上安装 Windows 操作系统,以体验更多软件及功能,而在 Mac 安装 Windows 虚拟机是常用的一种操作。下面就来…...
InfluxDB服务文件被误删怎么办?记录一次完整的1.8.6版本灾难恢复过程
InfluxDB服务文件误删灾难恢复实录:从崩溃边缘到完美复原 那天下午,服务器监控大屏突然亮起一片刺眼的红色告警——InfluxDB服务全线离线。作为团队里负责时序数据库运维的老兵,我立刻意识到问题的严重性。这套运行着1.8.6版本的InfluxDB承载…...
告别格式地狱:Paperxie 如何用智能排版让本科毕业论文一键通关
paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AIPPThttps://www.paperxie.cn/format/typesettinghttps://www.paperxie.cn/format/typesetting 当毕业论文写到最后,你是否也陷入过这样的困境:明明内容已经打磨完成,却…...
别再瞎找了!AI论文平台2026最新测评与推荐
2026年真正好用的AI论文平台,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…...
投资回报不到 1 年!这套导热油炉处理油泥减量化方案,凭什么火遍行业?
行业痛点:油泥处置面临的严峻挑战随着环保政策日趋严格,HW08类含油污泥的处理已成为石化、炼油等企业的必答题。然而,传统处理方式面临四大核心痛点:成本压力巨大:传统焚烧处置费用高达3000-5000元/吨,填埋…...
5大突破性功能:重新定义Mac微信体验的终极指南
5大突破性功能:重新定义Mac微信体验的终极指南 【免费下载链接】WeChatExtension-ForMac Mac微信功能拓展/微信插件/微信小助手(A plugin for Mac WeChat) 项目地址: https://gitcode.com/gh_mirrors/we/WeChatExtension-ForMac 你是否曾因微信消息被撤回而错…...
UVM避坑指南:为什么你的sequence卡住了?item_done没调用的常见问题排查
UVM验证中的sequence卡死问题:item_done未调用的深度排查手册 在芯片验证领域,UVM框架的sequence机制堪称验证工程师的"瑞士军刀",但这把利器偶尔也会出现卡壳的情况。想象一下这样的场景:你的验证环境已经运行了数百个…...
LFM2.5-1.2B-Thinking-GGUF快速部署:CSDN平台一键克隆→启动→分享链接三步到位
LFM2.5-1.2B-Thinking-GGUF快速部署:CSDN平台一键克隆→启动→分享链接三步到位 1. 模型简介 LFM2.5-1.2B-Thinking-GGUF是Liquid AI推出的轻量级文本生成模型,专为低资源环境优化设计。这个模型采用GGUF格式存储,配合llama.cpp运行时&…...
Oracle Product Hub Portal Cloud(简称 OPH Cloud)是 Oracle 提供的基于云的主数据管理(MDM)解决方案
Oracle Product Hub Portal Cloud(简称 OPH Cloud)是 Oracle 提供的基于云的主数据管理(MDM)解决方案,专为统一、治理和分发产品主数据而设计。它是 Oracle Cloud Enterprise Resource Planning (ERP)、Supply Chain M…...
基于YOLOv10深度学习的变电站液体泄露红外检测系统(YOLOv10+YOLO数据集+UI界面+Python项目+模型)
一、项目介绍 项目背景 随着电力系统的快速发展,变电站作为电网的核心节点,其安全稳定运行至关重要。液体泄漏(如绝缘油、冷却液等)是变电站设备(如变压器、电抗器、套管等)的常见故障之一,若…...
关于前端获取DOM节点的兼容IE6的代码封装
返回所有子元素节点的代码封装// 封装一个函数,这个函数可以返回元素的所有子元素节点(兼容到IE6),类似children的功能function getChildren(node){// 结果数组var children [];// 遍历node这个节点的所有子节点,判断每一个子节点的nodeType…...
