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

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 题解


  1. 计算本次登录日期与上一次登录日期差值
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     |
+----------+-------------+-------+--+
  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         |
+----------+--------------------+--+
  1. 合并上述两张表

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            |
+-------------+----------------+--------+-------------+-----------------------+--+
  1. 找出所有连续未登录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>表格水平居中、垂直靠上示例…...

数据分析入门指南:从基础概念到实际应用(一)

随着数字化时代的来临&#xff0c;数据分析在企业的日常运营中扮演着越来越重要的角色。从感知型企业到数据应用系统的演进&#xff0c;数据驱动的业务、智能优化的业务以及数智化转型成为了企业追求的目标。在这一过程中&#xff0c;数据分析不仅是技术的运用&#xff0c;更是…...

ArcGIS Pro三维空间分析、专题制图、遥感制图全流程系统教学

ESRI宣布&#xff1a;ArcGIS 10.8.2 是 ArcMap 的当前版本&#xff0c;在 2026 年 3 月 1 日之前将继续受支持。我们没有计划在 2021/22 年随 ArcGIS 版本一起发布 ArcMap 10.9.x。这意味着 10.8.x 系列将是 ArcMap 的最终版本系列&#xff0c;并将在 2026 年 3 月 1 日之前受支…...

Redis 7.x 系列【17】四种持久化策略

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Redis 版本 7.2.5 源码地址&#xff1a;https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. 案例演示2.1 无持久化2.2 RDB2.3 AOF2.4 混合模式2.4.1 方式一&#xff1a;…...

开发经验:go切片的继承

package main import ( "errors" "fmt" ) // LimitedSlice 是一个封装了切片的结构体&#xff0c;用于限制切片的最大容量 type LimitedSlice struct { slice []int maxCap int } // NewLimitedSlice 创建一个新的LimitedSlice实例&#xff…...

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设计的语言和查询协议&#xff0c;由Facebook于2015年推出。它允许客户端向服务器指定他们需要的数据字段&#xff0c;而不是像RESTful API那样请求整个资源然后过滤数据。在GraphQL中&#xff0c;客户端发送一个单一的请求&#xff0c;而服务器返…...

关于 Qt4Qt5迁移至Qt6出现QDesktopWidget和QApplication::desktop()删除后兼容Qt6 的解决方法

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/140036861 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…...

【HarmonyOS NEXT】鸿蒙Socket 连接

简介 Socket 连接主要是通过 Socket 进行数据传输&#xff0c;支持 TCP/UDP/Multicast/TLS 协议。 基本概念 Socket&#xff1a;套接字&#xff0c;就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。TCP&#xff1a;传输控制协议(Transmission Control Proto…...

1978Springboot在线维修预约服务应用系统idea开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot在线维修预约服务应用系统是一套完善的信息系统&#xff0c;结合springboot框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用springboot框架&#xff08;MVC模式开发 &#xff09;&#xff0c;系统具有完整的源代码和…...

【vue】实现自动轮播+滚轮控制

前言 有一个无缝轮播+滚轮控制的需求,找了很多的方法发现都没办法完美的实现这种效果。 用原生的js实现不是无缝滚动 用无缝滚动插件实现,发现pc端无法实现滚轮控制 目标 1 实现表格表无缝循环滚动 2 实现滚轮控制表格表数据滚动 3 掌握vue-seamless-scroll使用方式 一些思考…...

鸿翼FEX文件安全交换系统,打造安全高效的文件摆渡“绿色通道”

随着数字经济时代的到来&#xff0c;数据已成为最有价值的生产要素&#xff0c;是企业的重要资产之一。随着数据流动性的增强&#xff0c;数据安全问题也随之突显。尤其是政务、金融、医疗和制造业等关键领域组织和中大型企业&#xff0c;面临着如何在保障数据安全的同时&#…...

苹果电脑虚拟机运行Windows Mac环境安装Win PD19虚拟机 parallels desktop19虚拟机安装教程免费密钥激活

在如今多元的数字时代&#xff0c;我们经常需要在不同的操作系统环境下进行工作和学习。而对于 Mac 用户来说&#xff0c;有时候需要在自己的电脑上安装 Windows 操作系统&#xff0c;以体验更多软件及功能&#xff0c;而在 Mac 安装 Windows 虚拟机是常用的一种操作。下面就来…...

古戏台构件声学特性的时域有限差分方法【附模型】

✨ 长期致力于时域有限差分法、窑洞、戏台、八字墙、共形技术研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;曲面共形网格快速生成算法&#xff1a; …...

从Office功能区的“局外人“到“掌控者“:Office RibbonX Editor深度指南

从Office功能区的"局外人"到"掌控者"&#xff1a;Office RibbonX Editor深度指南 【免费下载链接】office-ribbonx-editor An overhauled fork of the original Custom UI Editor for Microsoft Office, built with WPF 项目地址: https://gitcode.com/g…...

为什么视频代剪辑会影响你的内容传播效果

为什么你精心拍的视频&#xff0c;发出去却没人看&#xff1f; 你有没有过这样的经历&#xff1a;花了一整天拍Vlog&#xff0c;素材画质高清、内容真实&#xff0c;可一剪出来就显得平淡无奇&#xff0c;点赞寥寥&#xff1f;或者婚礼当天感动全场&#xff0c;回看成片却像流水…...

从RD、CS到WK:一文讲透SAR主流成像算法的演进与选型实战

从RD、CS到WK&#xff1a;SAR成像算法选型实战指南 当无人机掠过灾区上空&#xff0c;或卫星扫描地球表面时&#xff0c;合成孔径雷达&#xff08;SAR&#xff09;正通过电磁波穿透云层和黑暗&#xff0c;将地面信息转化为高分辨率图像。而决定图像质量的关键&#xff0c;在于工…...

关联规则挖掘在Calabi-Yau流形Hodge数分析中的应用与复现

1. 项目概述&#xff1a;当数据挖掘遇见高维几何在理论物理和代数几何的交叉领域&#xff0c;Calabi-Yau流形一直扮演着核心角色。这些具有特殊拓扑结构的空间&#xff0c;不仅是弦理论中额外维度紧化的关键候选者&#xff0c;其本身丰富的数学性质也吸引着无数研究者。然而&am…...

机器学习与深度学习在社交媒体心理健康检测中的权衡与选择

1. 项目概述&#xff1a;当AI遇见心灵&#xff0c;社交媒体心理健康检测的技术十字路口在社交媒体成为我们数字生活延伸的今天&#xff0c;海量的文本数据无意中记录着用户的情感波动与心理状态。作为一名长期混迹于数据科学和自然语言处理&#xff08;NLP&#xff09;一线的从…...

保姆级教程:手把手教你搞定ESXi 6.7安装前的BIOS设置(VT-x/VT-d/AES全开)

从零开始&#xff1a;ESXi 6.7安装前的BIOS设置终极指南当你第一次接触企业级虚拟化平台时&#xff0c;那种既兴奋又忐忑的心情我完全理解。作为过来人&#xff0c;我记得自己第一次在Dell PowerEdge服务器上安装ESXi时&#xff0c;光是搞清楚BIOS里那些晦涩的选项就花了整整一…...

基于MAX78000的边缘AI语音识别:从模型训练到嵌入式部署实战

1. 项目概述与核心思路最近在捣鼓一个挺有意思的小项目&#xff0c;我把它叫做“声控转向控制器”。简单来说&#xff0c;这玩意儿能听懂你说的几个特定单词&#xff0c;比如“左转”、“右转”、“前进”、“后退”&#xff0c;然后控制对应的LED灯亮起。你可能会想&#xff0…...

eqMac终极指南:macOS系统级音频均衡器免费使用教程

eqMac终极指南&#xff1a;macOS系统级音频均衡器免费使用教程 【免费下载链接】eqMac macOS System-wide Audio Equalizer & Volume Mixer &#x1f3a7; 项目地址: https://gitcode.com/gh_mirrors/eq/eqMac 你是否曾经觉得Mac电脑的音质不够理想&#xff1f;想要…...

Wand-Enhancer:完全免费解锁WeMod专业版功能的终极指南

Wand-Enhancer&#xff1a;完全免费解锁WeMod专业版功能的终极指南 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer 还在为WeMod专业版的高昂订阅费用而烦…...