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            |
+-------------+-----------------------+--+

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/40550.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Conmi的正确答案——ESP32-C3开启安全下载模式

IDF版本:4.4.7 注意事项:一旦烧录“安全下载模式”,模组将无法被读取或清理,只能通过eclipse原项目烧录程序进行重新烧录,无法再烧录其他固件。 20240703110201——追加解法,暂时无法解安全下载模式 &…

vitejs/plugin-vue插件

源文档:地址 注意:从vue 3.2.13和vitejs/plugin-vue 1.9.0开始,vue/compiler-sfc不再需要作为对等依赖。 // vite.config.js import vue from vitejs/plugin-vueexport default {plugins: [vue()], } 为了支持JSX/TSX,还需要vi…

拓展欧几里得和裴蜀定理

裴蜀定理(或贝祖定理)说明了对任何整数a、b和它们的最大公约数d,关于未知数x和y的线性不定方程(称为裴蜀等式):若a,b是整数,且gcd(a,b)d,那么对于任意的整数x,y,axby都一定是d的倍数&#xff0c…

SEO之快速网站诊断(二)

初创企业搭建网站的朋友看1号文章;想学习云计算,怎么入门看2号文章谢谢支持: 1、我给不会敲代码又想搭建网站的人建议 2、新手上云 (接上一篇。。。。) 4、外部链接 Google 的link:指令非常不准确,基本不…

【掌握C++ string 类】——【高效字符串操作】的【现代编程艺术】

专栏&#xff1a;C学习笔记 上一篇&#xff1a;【C】——【 STL简介】——【详细讲解】 1. 为什么要学习 string 类&#xff1f; 1.1 C 语言中的字符串 在 C 语言中&#xff0c;字符串是以 \0 结尾的字符集合。如下所示&#xff1a; #include <stdio.h>int main() {c…

Postman工具基本使用

一、安装及基本使用 安装及基本使用参见外网文档&#xff1a;全网最全的 postman 工具使用教程_postman使用-CSDN博客 建议版本&#xff1a;11以下&#xff0c;比如10.x.x版本。11版本以后貌似是必须登录使用 二、禁止更新 彻底禁止postman更新 - 简书 host增加&#xff1…

【Linux进阶】Linux目录配置,FHS

在了解了每个文件的相关种类与属性&#xff0c;以及了解了如何修改文件属性与权限的相关信息后&#xff0c;再来要了解的就是&#xff0c;为什么每个Linux发行版它们的配置文件、执行文件、每个目录内放置的东西&#xff0c;其实都差不多&#xff1f;原来是有一套标准依据&…

uniapp+vue3+echarts编写微信小程序

uniappvue3echarts编写微信小程序 记录一下自己uniapp使用echarts开发图表&#xff0c;之前网上找了很多&#xff0c;本以为应该是挺常见的使用方式&#xff0c;没想到引入之路居然这么坎坷&#xff0c;在Dcloud插件市场&#xff0c;使用最多的&#xff1a;echarts-for-wx 但是…

vue---基本原理(二)

1、slot的基础理解 slot又名插槽&#xff0c;是vue的内容分发机制&#xff0c;组件内部的模板引擎使用slot元素作为承载分发的出口。是子组件的一个模板标签元素&#xff0c;而这一个标签元素是否显示&#xff0c;以及怎么显示&#xff0c;是由父元素控制的。slot又分为默认插槽…

用Python制作动态钟表:实时显示时间的动画

文章目录 引言准备工作前置条件 代码实现与解析导入必要的库初始化Pygame绘制钟表函数主循环 完整代码 引言 动态钟表是一种直观且实用的UI元素&#xff0c;能够实时显示当前时间。在这篇博客中&#xff0c;我们将使用Python创建一个动态钟表&#xff0c;通过利用Pygame库来实…

React、JSX简介、渲染列表、基础和复杂的条件渲染

目录 一、简介 1、搭建环境 2、回到项目&#xff08;VScode&#xff09; 3、项目核心渲染路径 4、网站资料&#xff08;启动项目的方法&#xff09; 二、JSX 三、实现渲染列表 四、实现条件渲染 五、实现复杂条件渲染 一、简介 1、搭建环境 npx creat-react-app reac…

YUV 颜色编码详解

YUV 简介 YUV是被欧洲电视系统所采用的一种颜色编码方法&#xff08;属于PAL&#xff09;&#xff0c;是PAL和SECAM模拟彩色电视制式采用的颜色空间。在现代彩色电视系统中&#xff0c;通常采用三管彩色摄影机或彩色CCD摄影机进行取像&#xff0c;然后把取得的彩色图像信号经分…

CC6利用链分析

CC1的两条利用链&#xff0c;在JDK 8u71之后已修复&#xff0c;不可利用。 学一下不受版本限制的CC6利用链 分析版本 Commons Collections 3.2.1 JDK 8u65 环境配置参考JAVA安全初探(三):CC1链全分析 分析过程 我的Github主页Java反序列化学习同步更新&#xff0c;有简单…

java.lang.IllegalArgumentException: pointerIndex out of range

问题分析 这是ViewPager自身对于多点触控处理的bug&#xff0c;该bug可以追溯到Android4.4。该问题会导致应用崩溃。根本原因在于没有调用 super.onInterceptTouchEvent(); 造成 mActivePointerIdactivePointerIndex的值不能正确获取。导致父类 onTouchEvent取值错误&#xff…

【WEB前端】---HTML---结构---笔记

目录 1.标签---单标签和双标签 1.1单标签 1.2双标签 2.基本结构标签 2.1HTML标签 2.2文档头部标签 2.3文档标题标签 2.4文档的主题标签 3.常用的标题标签 (n∈[1,6]) 4.段落标签 5.换行标签 6.文本格式化标签 6.1粗体 6.2倾斜 6.3删除线 6.4下划线 7.div和spa…

服务器工具集合推荐

推荐一个朋友开源的服务器运维整合工具,目前的功能包括: ddns&#xff0c;rdp、ssh终端、ftp、http代理&#xff0c;支持在线文件编辑&#xff0c;文件管理&#xff0c;docker&#xff0c;进程&#xff0c;系统监控、wol唤醒&#xff0c;电脑远程开机&#xff0c;点对点&#…

[Qt] Qt for android, gradle-8.3-bin.zip (No such file or directory)

前言&#xff1a; android 工程需要 gradle 作为打包工具&#xff0c;Qt for android 如果想要打包 apk 同样需要使用 gradle&#xff0c;但是 包括 Android studio 在内的诸多 Android IDE 工具都没有自带的 gradle 工具&#xff0c;可能是因为 gradle 的版本迭代较快&#x…

深度分析和对比本地大语言模型Ollama和LocalAI

前言 在充满活力的人工智能&#xff08;AI&#xff09;世界中&#xff0c;开源工具已成为开发人员和组织利用LLM&#xff08;大型语言模型&#xff09;力量的重要资源。这些工具通过提供对高级LLM模型的访问权限&#xff0c;使各种用户能够构建创新和前沿的解决方案。在众多可…

AI工具大盘点!打工人必备的几款效率神器!

前言 在这个AI技术大放异彩的时代&#xff0c;找到合适的工具&#xff0c;可以让我们的工作效率翻倍。作为一名AI工具测评博主&#xff0c;我今天要向大家推荐几款我亲自体验并认为非常实用的AI工具。它们不仅能够提升你的工作效率&#xff0c;还能让你在职场上更加得心应手。…

为本地化准备营销材料的几个步骤

为本地化准备营销材料涉及几个关键步骤&#xff0c;以确保内容在文化上合适、语言上准确&#xff0c;并与目标受众相关。以下是五个基本步骤&#xff1a; 进行市场调查 了解目标市场至关重要。进行深入研究&#xff0c;以收集有关目标地区受众的文化细微差别、消费者行为、地…