HQL解决连续三天登陆问题

news2024/9/27 19:27:26

1.背景

统计连续登录天数超过3天的用户,输出信息包括:用户id,登录天数,起始时间,结束时间;

2.准备数据

-- 建表
create table if not exists user_login_3days(
    user_id STRING,
    login_date date
);

--插入数据
insert into user_login_3days values ('01','2023-08-02');
insert into user_login_3days values ('01','2023-08-03');
insert into user_login_3days values ('01','2023-08-04');
insert into user_login_3days values ('01','2023-11-02');
insert into user_login_3days values ('01','2023-12-09');
insert into user_login_3days values ('02','2023-01-01');
insert into user_login_3days values ('02','2023-04-23');
insert into user_login_3days values ('03','2023-09-10');
insert into user_login_3days values ('03','2023-09-11');
insert into user_login_3days values ('03','2023-09-12');
insert into user_login_3days values ('04','2023-04-23');
insert into user_login_3days values ('04','2023-04-24');
insert into user_login_3days values ('05','2023-09-11');
insert into user_login_3days values ('06','2023-09-12');

-- 查询数据数据
select * from user_login_3days order by user_id;

在这里插入图片描述

3.解决思路以及实现

思路1:row_number()

  • 1.通过对用户id进行开窗函数row_number,对登陆时间进行降序排列
  • 2.使用date_sub(login_date,rn)函数进行日期求出差值日期
  • 3.对user_id和diff_date分组求出时间的区间范围
  • 4.对结果进行过滤操作
SELECT
 t2.user_id,
 count(1)           as login_times,
 min(t2.login_date) as start_date,
 max(t2.login_date) as end_date
FROM
(
    SELECT
     t1.user_id,
     t1.login_date,
     date_sub(t1.login_date,rn) as diff_date
    FROM
    (
        SELECT
         user_id,
         login_date,
         row_number() over(partition by user_id order by login_date asc) as rn
        FROM user_login_3days
    ) t1
) t2
group by t2.user_id, t2.diff_date
having login_times >= 3;

思路2:lag()/lead()

  • 1.通过对用户id进行开窗函数lag/lead,求出前面第二个的日期与当前的日期差以及后面一个日期与当前日期的差值
  • 2.对结果进行过滤操作
SELECT
  user_id,
  lag_login_date,
  login_date
FROM
      (SELECT
         user_id,
         login_date,
         lag(login_date,2,login_date) over(partition by user_id order by login_date) as lag_login_date,
         lead(login_date,1,login_date) over(partition by user_id order by login_date) as lead_login_date
      FROM user_login_3days
      ) t1
where datediff(login_date,lag_login_date) =2

4.总结

连续登陆问题解决的关键在于:如何判断连续?
通过对user_id分组排序后,使用登陆日期减去序号rn。如果连续,则得到的这个日期会相同。

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

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

相关文章

查询数据库字段信息 mysql

属性: SELECT TABLE_SCHEMA AS 库名, TABLE_NAME AS 表名, COLUMN_NAME AS 字段名, ORDINAL_POSITION AS 字段顺序, COLUMN_DEFAULT AS 默认值, IS_NULLABLE AS 是否为空, DATA_TYPE …

怎么把pdf文件变小?值得一看的文件压缩方法

现在很多平台对于上传的文件大小是有限制的,如果压缩成压缩包的形式发送,虽然可以减小一点体积,但对方无法直接打开预览文件内的内容,很不方便,怎么才能直接将PDF文件的体积压缩变小呢?下面就给大家汇总了几…

GB2312转UTF-8部分中文乱码

现象 最近写了个txt导入,客户反馈有时候导入的数据,会出现个别中文乱码的现象,但是我之前已经做过编码转换处理了,统一转成了UTF-8。 比如“鞠婧祎”,导入进来是这样: 排查思路 首先看了一下这个文本的编码格式&am…

Window Server 与 Windows 系统开关机日志查看方法

目录 Windows/Windows Server 查看日志Windows 系统常用的事件 ID 环境:Windows Server 2019 (也适用于 Windows 其他系统)。 不同版本的 Windows 图标可能有所不同,但是服务器级 Windows Server 与普通桌面级 Windows 还会有些操…

低代码平台是为何而生?低代码平台发展前景又如何呢?

低代码平台是为何而生?低代码平台发展前景又如何呢?低代码平台在近年来已经吸引了越来越多的关注,被认为是一种能够加速应用程序开发的解决方案。低代码平台虽然还存在着各种各样的问题,但是低代码平台的前景依然十分广阔。 下面…

放苹果(巧用递归)--夏令营

题目 tips: 1.写递归要有递归边界条件,递归过程就是向边界不断靠近 这里注意:虽然题目给的m,n输入数据范围是>1的,但不代表边界就是这个; 首先,n0肯定是不存在的,所以n的边界肯定是1&#…

粒子目标_雨滴

nParticleShape1.goalU parentU; nParticleShape1.goalV parentV; 使用纹理发射nParticle nParticleShape1.goalV .01; nParticleShape1.goalV .01*-1; goalV if(nParticleShape1.goalV <.045) { nParticleShape1.lifespanPP -1; } 粒子轨迹 nParticleShape1.goalU …

【腾讯云 TDSQL-C Serverless 产品测评】“橡皮筋“一样的数据库『MySQL高压篇』

【腾讯云 TDSQL-C Serverless 产品测评】"橡皮筋"一样的数据库 活动介绍服务一览何为TDSQL &#xff1f;Serverless 似曾相识&#xff1f; 降本增效&#xff0c;不再口号&#xff1f;动手环节 --- "压力"山大实验前瞻稍作简介资源扩缩范围&#xff08;CCU&…

2023年最新 Github Pages 使用手册

参考&#xff1a;GitHub Pages 快速入门 1、什么是 Github Pages GitHub Pages 是一项静态站点托管服务&#xff0c;它直接从 GitHub 上的仓库获取 HTML、CSS 和 JavaScript 文件&#xff0c;&#xff08;可选&#xff09;通过构建过程运行文件&#xff0c;然后发布网站。 可…

执行jmeter端口不够用报错(Address not available)

执行jmeter端口不够用报错(Address not available) linux解决方案 // 增加本地端口范围 echo 1024 65000 > /proc/sys/net/ipv4/ip_local_port_range// 启用快速回收TIME_WAIT套接字 sudo sysctl -w net.ipv4.tcp_tw_recycle 1// 启用套接字的重用 sudo sysctl -w net.ipv4.…

CRM系统如何定制?定制哪些功能?

虽然市场上有许多成熟的CRM系统供企业选择&#xff0c;但很多时候&#xff0c;现有的标准化CRM系统无法满足企业的特殊需求。这时就需要进行CRM系统定制。那么&#xff0c;什么时候需要CRM系统定制&#xff0c;CRM系统定制怎么弄&#xff1f;下面我们就说一说。 什么时候需要C…

【教程】超人RAR解密助手

通常压缩包设置了密码&#xff0c;当我们对压缩包进行操作的的时候都需要输入密码&#xff0c;比如解压文件、修改密码、删除密码等情况&#xff0c;但是忘记了压缩包密码之后都没有办法操作了。这种情况下我们需要先找回密码才能继续操作。 想要找回密码&#xff0c;我们可以…

根据源码,模拟实现 RabbitMQ - 网络通讯设计,实现客户端Connection、Channel(完结)

目录 一、客户端代码实现 1.1、需求分析 1.2、具体实现 1&#xff09;实现 ConnectionFactory 2&#xff09;实现 Connection 3&#xff09;实现 Channel 二、编写 Demo 2.1、实例 2.1、实例演示 一、客户端代码实现 1.1、需求分析 RabbitMQ 的客户端设定&#xff…

Jetpack Compose UI架构

Jetpack Compose UI架构 引言 Jetpack Compose是我职业生涯中最激动人心的事。它改变了我工作和问题思考的方式&#xff0c;引入了易用且灵活的工具&#xff0c;几乎可轻松实现各种功能。 早期在生产项目中尝试了Jetpack Compose后&#xff0c;我迅速着迷。尽管我已有使用Co…

margnalizeHuberJacibian测试Demo

文章目录 margnalize公式及原理&#xff1a;测试代码及运行结果解说代码编译命令&#xff1a;运行结果&#xff1a; Huber原理代码 Jacibian测试代码代码解释代码编译命令运行结果 margnalize 公式及原理&#xff1a; 测试代码及运行结果 解说 /***************************…

python 包管理工具poetry和异步sanic web框架实践+配置镜像源

上传源码到服务器&#xff0c;然后执行poetry install安装依赖。 多进程启动脚本run.sh内容&#xff1a; #!/bin/bash #应用入口文件 APP_NAME/www/wwwroot/python-sanic/main.py #进程关键字 PROCESS_KEYWORDpython-sanic #使用说明&#xff0c;用来提示输入参数 usage(){…

潮玩数藏App:数字时代下的潮流收藏新体验

随着数字时代的到来&#xff0c;潮流收藏成为了一种新型的文化现象&#xff0c;并在年轻人中迅速流行起来。为了满足这一需求&#xff0c;潮玩数藏App应运而生&#xff0c;为用户提供了一个专业、便捷的潮流收藏平台。本文将深入探讨潮玩数藏App的专业性、思考深度以及逻辑性&a…

“爱在七夕,情暖人间”店口志愿者开展敬老助残服务活动

在这个充满爱心的世界里&#xff0c;让志愿服务燃烧我们的人生。 8月22日七夕节&#xff0c;诸暨市爱心助残协会联合牛皋社区党支部、老年协会、店口镇义工协会、店口镇残疾人之家、诸暨凯客蛋糕、诸暨中康医院、杨琼发艺工作室、国芬理发店等爱心团队在店口残疾人之家开展了“…

好用的电容笔有哪些推荐?开学季便宜好用电容笔推荐

开学马上要来了&#xff0c;想必很多学生党都在为开学而做准备&#xff0c;要知道&#xff0c;原装的Apple Pencil&#xff0c;虽然功能很强&#xff0c;但是价格却很贵&#xff0c;不是一般人能够承受得起的。所以&#xff0c;是否也有类似于Apple Pencil这样的电容笔&#xf…

直播app源码,会话描述协议SDP:高质量平台

摘要&#xff1a; SDP协议又称为会话描述协议&#xff0c;在直播app源码平台中&#xff0c;通过定义实时通信参数&#xff0c;管理会话信息和媒体数据&#xff0c;来为用户提供实时通信服务&#xff0c;确保通信的质量与稳定&#xff0c;例如:在直播app源码平台的直播间中&…