经典sql题(一)求连续登录不少于三天用户
示例数据
假设我们的 test 表有以下数据:
| id | date |
|---|---|
| 1 | 2023-10-01 08:00:00 |
| 1 | 2023-10-01 09:00:00 |
| 1 | 2023-10-02 10:00:00 |
| 1 | 2023-10-03 11:00:00 |
| 2 | 2023-10-01 10:00:00 |
| 2 | 2023-10-02 12:00:00 |
| 2 | 2023-10-03 14:00:00 |
| 2 | 2023-10-04 15:00:00 |
| 3 | 2023-10-01 16:00:00 |
第一步:去重并提取日期
SELECT id,SUBSTR(date, 1, 10) AS date1
FROM test
GROUP BY id, SUBSTR(date, 1, 10);
结果(表 table1):
| id | date1 |
|---|---|
| 1 | 2023-10-01 |
| 1 | 2023-10-02 |
| 1 | 2023-10-03 |
| 2 | 2023-10-01 |
| 2 | 2023-10-02 |
| 2 | 2023-10-03 |
| 2 | 2023-10-04 |
| 3 | 2023-10-01 |
第二步:为每个用户和日期生成序列号
SELECT id,date1,DATE_SUB(date1, INTERVAL ROW_NUMBER() OVER (PARTITION BY id ORDER BY date1) DAY) AS date2
FROM (SELECT id,SUBSTR(date, 1, 10) AS date1FROM testGROUP BY id, SUBSTR(date, 1, 10)
) AS table1; -- 使用 'table1' 作为别名
结果(表 table2):
| id | date1 | date2 |
|---|---|---|
| 1 | 2023-10-01 | 2023-10-01 |
| 1 | 2023-10-02 | 2023-10-01 |
| 1 | 2023-10-03 | 2023-10-01 |
| 2 | 2023-10-01 | 2023-10-01 |
| 2 | 2023-10-02 | 2023-10-01 |
| 2 | 2023-10-03 | 2023-10-01 |
| 2 | 2023-10-04 | 2023-10-01 |
| 3 | 2023-10-01 | 2023-10-01 |
第三步:统计连续的登录天数
SELECT id,date2,COUNT(*) AS day_cnt
FROM (SELECT id,date1,DATE_SUB(date1, INTERVAL ROW_NUMBER() OVER (PARTITION BY id ORDER BY date1) DAY) AS date2FROM (SELECT id,SUBSTR(date, 1, 10) AS date1FROM testGROUP BY id, SUBSTR(date, 1, 10)) AS table1 -- 保持一致,使用 'table1'
) AS table2 -- 使用 'table2' 作为新的别名
GROUP BY id, date2
HAVING COUNT(*) >= 3;
结果(最终结果):
| id | date2 | day_cnt |
|---|---|---|
| 1 | 2023-09-30 | 3 |
| 2 | 2023-09-30 | 4 |
完整步骤解析
-
去重提取日期:
- 查询:提取每个用户的唯一登录日期。
- 结果表
table1:显示每个用户的唯一日期。
-
为每个用户生成序列号:
- 查询:为每个用户的日期生成序号,并计算
date2。 - 结果表
table2:显示用户的日期和对应的date2。
- 查询:为每个用户的日期生成序号,并计算
- 步骤:
-
使用
ROW_NUMBER()函数,按照日期顺序为每个用户的登录日期分配一个序号。 -
例如,对于用户 ID = 1,假设他们的日期是
2023-10-01、2023-10-02和2023-10-03,ROW_NUMBER()将为它们生成序号 1、2 和 3。 -
date2是通过将每个日期减去它的序号得到的。这个操作的目的是为了检测连续的日期。 -
例如:
- 对于
2023-10-01,序号是 1,计算为2023-10-01 - 1,得到2023-09-30。 - 对于
2023-10-02,序号是 2,计算为2023-10-02 - 2,得到2023-09-30。 - 对于
2023-10-03,序号是 3,计算为2023-10-03 - 3,得到2023-09-30。
- 对于
-
通过这样的计算,我们可以将连续的日期归类到同一个组中。因为给定的 date2 值会相同(如上例中都是 2023-09-30),这使得后续的统计操作(如计算连续登录天数)变得简单。具体来说:
- 连续性检测:当两个日期的
date2相同,说明它们是连续的。因此,进行统计时可以通过分组date2来确定每个用户连续登录的天数。
以用户 ID = 1 为例:
| id | date1 | ROW_NUMBER | date2 |
|---|---|---|---|
| 1 | 2023-10-01 | 1 | 2023-09-30 |
| 1 | 2023-10-02 | 2 | 2023-09-30 |
| 1 | 2023-10-03 | 3 | 2023-09-30 |
- 统计连续的登录天数:
- 查询:根据
date2统计每个用户的连续登录天数,筛选出连续登录天数大于等于3天的用户。 - 最终结果:显示符合条件的用户 ID 和连续登录天数。
- 查询:根据
相关文章:
经典sql题(一)求连续登录不少于三天用户
示例数据 假设我们的 test 表有以下数据: iddate12023-10-01 08:00:0012023-10-01 09:00:0012023-10-02 10:00:0012023-10-03 11:00:0022023-10-01 10:00:0022023-10-02 12:00:0022023-10-03 14:00:0022023-10-04 15:00:0032023-10-01 16:00:00 第一步࿱…...
2024java面试-软实力篇
为什么说简历很重要? 一份好的简历可以在整个申请面试以及面试过程中起到非常好的作用。 在不夸大自己能力的情 况 下,写出一份好的简历也是一项很棒的能力。为什么说简历很重要呢? 、 先从面试来说 假如你是网申,你的简历必然…...
「OC」present和push操作区别以及混合推出的实现
「OC」present和push操作区别以及混合推出的实现 文章目录 「OC」present和push操作区别以及混合推出的实现前言present用途while循环越级返回通知越级返回添加present动画 push模态视图和push视图混合跳转操作一:控制器Apresent控制器B,控制器B再将控制…...
【高分系列卫星简介】
高分系列卫星是中国国家高分辨率对地观测系统(简称“高分工程”)的重要组成部分,旨在提供全球范围内的高分辨率遥感数据,广泛应用于环境监测、灾害应急、城市规划、农业估产等多个领域。以下是对高分系列卫星及其数据、相关参数和…...
八股文-多线程、并发
八股文-多线程、并发 最近学到了一种方法,可以用于简历项目经验编写以及面试题目的回答 STAR法则:在什么背景下,你需要解决什么问题,你做了啥,得到了什么结果 情境(Situation): 描…...
xtu oj 折纸
折纸# 题目描述# 一个长为a,宽为b矩形的纸,我们沿b边(左边)的中点与右上顶点的边折叠,求左上顶点在折叠以后离下边的距离? 输入# 第一行是一个整数T(1≤T≤10000),表示样例的个数。 以后每行一个样例,为两个整数1≤a,b≤1000。…...
传知代码-多示例AI模型实现病理图像分类
代码以及视频讲解 本文所涉及所有资源均在传知代码平台可获取 概述 本文将基于多示例深度学习EPLA模型实现对乳腺癌数据集BreaKHis_v1的分类。EPLA模型是处理组织病理学图像的经典之作。EPLA模型是基于多示例学习来进行了,那么多示例学习模型对处理病理学图像具有…...
Java知识点小结3:内存回收
文章目录 对象引用强引用软引用(SoftReference)弱引用(WeakReference)考一考 虚引用(PhantomReference)总结 垃圾回收新生代老年代永生代 内存管理小技巧尽量使用直接量使用StringBuilder和StringBuffer进行…...
LeetCode746:使用花费最小爬楼梯
题目链接:746. 使用最小花费爬楼梯 - 力扣(LeetCode) 代码如下 class Solution { public:int minCostClimbingStairs(vector<int>& cost) {int m cost.size();if(m 1) return min(cost[1], cost[0]);if(m 0) return cost[0]…...
列表、数组排序总结:Collections.sort()、list.sort()、list.stream().sorted()、Arrays.sort()
列表类型 一.Collections.sort() Collections.sort()用于List类型的排序,其提供了两个重载方法: 1.sort(List<T> list) (1)List指定泛型时只能指定引用数据类型,也就是说无法用于基本数据类型的排序。 &am…...
【资料分析】刷题日记3
第一套 √ 考点:基期比重差很温柔的题 普通专科女生 占比 52.5% - 1.7% 50.8% 成人本专科女生 占比 57.8% - 4.6% 53.2% 相比降低了2.4% 知比重和部分量,求整体在花生老师的解法中体会啥叫适当约分 0.1899 / 47.8% / 87.5% 》0.19 / (4…...
基于SpringBoot+Vue的商场停车场管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…...
4. 密码协议
4. 密码协议 (1) 协议的基本概念 协议是一种在两个或多个参与者之间进行通信的规范,它定义了参与者之间的交互方式、消息格式和通信过程。协议的目的是确保通信的可靠性和安全性,防止信息被篡改、伪造或泄露。 (2) 密码协议分类及基本密码协议 密码协议是用于加密和解密数…...
基于嵌入式的智能物流柜( 触摸屏/0.96寸oled屏)
演示 智能物流柜(基础版) 智能物流柜(升级版) 前言 这是本人在大二在学校接的一个简单的实验室项目,之前发布了一个,由于那是在暑假,家里器材有限,代码敲完之后,用面包板…...
VSCode创建C++项目和编译多文件
前言 在刚安装好VSCode后,我简单尝试了仅main.cpp单文件编译代码,没有问题,但是当我尝试多文件编译时,就出现了无法识别cpp文件。 内容 创建项目 首先点击左上角“文件”;在菜单中选择“打开文件夹”;在…...
7个提升网站分页体验的 CSS 和 JavaScript 代码片段
文章目录 前言正文1.简洁直观的悬停分页效果2.实时显示页码的分页3.适合响应式设计的多功能分页4.专为移动设备优化的分页5.无数字的极简分页设计6.触屏友好的分页7.结合无限滚动与分页的设计 总结 前言 分页是内容丰富的网站中不可缺少的导航工具,能帮助用户更轻松…...
C++——用带有默认参数的函数实现,求两个整数或三个整数中的最大数。
没注释的源代码 #include <iostream> using namespace std; int max(int a,int b,int c0); int main() { int a,b,c; cout<<"请输入三个整数:"; cin>>a>>b>>c; cout<<"三个整数的最大值是&am…...
对商品分类系统的若干问题的思考
科学研究的目的就是研究事物的特征,并根据共同的特征加以分类 商品分类是商业,制造业中最普遍的活动,几乎所有的企业,电商平台都要对销售的商品,使用的原材料(BOM)进行分类和编号。 商品分类貌似…...
javascript中Number 类型 在实际开发中常用的一些操作方法
在 JavaScript 中,Number 类型是非常基础的数据类型之一,用于表示整数和浮点数。除了基本的算术运算外,还有许多内置的方法可以帮助你处理数字。下面列举了一些在实际开发中常用的 Number 类型的操作方法: 1. 转换方法 Number()…...
部分解决FDTD安装后,matlab指令fopen报错
今天在新的win11电脑上安装FDTD时,发现在C:\Program Files目录中并没有Lumerical文件夹,把激活文件粘贴过去后虽然能正常启动,但对于matlab link FDTD过程中无法响应以下代码: setenv(PATH, [getenv(PATH) ;C:\Program Files\Lum…...
单克隆抗体如何被制备并应用于疾病治疗?
一、什么是单克隆抗体?其与多克隆抗体有何区别?单克隆抗体(Monoclonal Antibody,mAb)是指由单一B淋巴细胞克隆所产生的高度均一、仅针对某一特定抗原表位进行识别的抗体。这类抗体具有高度特异性。与之相对的是多克隆抗…...
告别驱动噩梦:在 Ubuntu 22.04 上为 RTX 5070 显卡手动编译安装驱动的完整心路历程
告别驱动噩梦:在 Ubuntu 22.04 上为 RTX 5070 显卡手动编译安装驱动的完整心路历程 1. 缘起:当官方驱动安装成为一场噩梦 那是一个普通的周末早晨,我满怀期待地拆开了刚到的RTX 5070显卡。作为一名长期使用Ubuntu进行深度学习开发的工程师&…...
3个突破让你自由掌控数字阅读:fanqienovel-downloader全攻略
3个突破让你自由掌控数字阅读:fanqienovel-downloader全攻略 【免费下载链接】fanqienovel-downloader 下载番茄小说 项目地址: https://gitcode.com/gh_mirrors/fa/fanqienovel-downloader 如何确保你钟爱的网络小说永不消失? 当你在通勤途中打…...
Gost透明代理终极指南:实现无感知网络流量转发 [特殊字符]
Gost透明代理终极指南:实现无感知网络流量转发 🚀 Gost透明代理是一种强大的网络流量转发工具,能够实现完全无感知的网络代理体验。作为GO Simple Tunnel项目的核心功能,Gost透明代理让用户无需手动配置每个应用的代理设置&#x…...
Hunyuan-MT-7B GPU部署:Pixel Language Portal在单卡A10上并发处理16路实时语音翻译压测报告
Hunyuan-MT-7B GPU部署:Pixel Language Portal在单卡A10上并发处理16路实时语音翻译压测报告 1. 项目背景与核心价值 Pixel Language Portal(像素语言跨维传送门)是一款基于Tencent Hunyuan-MT-7B大模型构建的创新翻译工具。与传统翻译软件…...
AI时代,普通人必须知道的10个法律与版权风险
生成式AI的法律风险未经授权使用受版权保护的数据训练AI模型可能引发侵权诉讼。AI生成内容若与原创作品高度相似,可能被判定为抄袭。深度伪造与肖像权利用AI换脸或合成声音可能侵犯他人肖像权、名誉权。未经许可使用公众人物形象牟利,可能面临高额赔偿。…...
weibo-rss:让微博内容主动找到你的高效订阅工具
weibo-rss:让微博内容主动找到你的高效订阅工具 【免费下载链接】weibo-rss 🍰 把喜欢的微博转为 RSS 订阅源 项目地址: https://gitcode.com/gh_mirrors/we/weibo-rss 在信息爆炸的时代,我们每天要处理大量碎片化内容。微博作为主流社…...
深入探索Java JPA中的CriteriaQuery
在Java持久化API(JPA)中,CriteriaQuery 提供了强大的查询功能,允许我们以面向对象的方式构建动态查询。今天我们将通过一个实际的例子,深入探讨如何使用CriteriaQuery来获取特定书籍的最新更新ID。 什么是CriteriaQuery? CriteriaQuery是JPA的一部分,它提供了一种类型…...
别再只会用‘Let‘s think step by step’了:DeepSeek-R1原生思维链的实战调优指南
别再只会用‘Let‘s think step by step’了:DeepSeek-R1原生思维链的实战调优指南 当你在深夜调试一个复杂的代码生成任务时,模型突然输出了一个完全不符合预期的结果。你盯着屏幕,反复检查自己的prompt——明明已经加上了经典的"Lets …...
基于stm32的公司考勤系统[单片机]-计算机毕业设计源码+LW文档
摘要:本文设计了一款基于STM32单片机的公司考勤系统,详细阐述了其硬件组成和软件算法。该系统利用RFID(或指纹识别等)技术进行员工身份识别,结合实时时钟模块记录考勤时间,并通过OLED显示屏实时显示考勤信息…...
