mysql/hive求最大连续天数(间隔1天也算连续)
数据:
User_id login_date
1001 2021-08-02
1001 2021-08-01
1001 2021-08-03
1001 2021-08-05
1001 2021-08-06
1001 2021-08-07
1001 2021-08-10
1001 2021-08-12
1002 2021-08-01
1002 2021-08-02
1002 2021-08-03
1002 2021-08-07
1002 2021-08-09
1002 2021-08-11
1002 2021-08-13
1002 2021-08-15
建表语句:
DROP TABLE IF EXISTS `login`;
CREATE TABLE `login` (`user_id` int NOT NULL,`login_date` date NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = gbk COLLATE = gbk_chinese_ci ROW_FORMAT = Dynamic;INSERT INTO `login` VALUES (1001, '2021-08-02');
INSERT INTO `login` VALUES (1001, '2021-08-01');
INSERT INTO `login` VALUES (1001, '2021-08-03');
INSERT INTO `login` VALUES (1001, '2021-08-05');
INSERT INTO `login` VALUES (1001, '2021-08-06');
INSERT INTO `login` VALUES (1001, '2021-08-07');
INSERT INTO `login` VALUES (1001, '2021-08-10');
INSERT INTO `login` VALUES (1001, '2021-08-12');
INSERT INTO `login` VALUES (1002, '2021-08-01');
INSERT INTO `login` VALUES (1002, '2021-08-02');
INSERT INTO `login` VALUES (1002, '2021-08-03');
INSERT INTO `login` VALUES (1002, '2021-08-07');
INSERT INTO `login` VALUES (1002, '2021-08-09');
INSERT INTO `login` VALUES (1002, '2021-08-11');
INSERT INTO `login` VALUES (1002, '2021-08-13');
INSERT INTO `login` VALUES (1002, '2021-08-15');
方法一:等差数列法,不灵活
selectuser_id,max(continuous) max_continuous
from (select -- sum(days)是指间隔连续的天数,而count(*)-1是间隔连续的天数中间的值,-- 比如1,3,5天,sum(days)=3,而count(*)-1就是2,4这两天user_id,sum(days)+count(*)-1 continuousfrom (selectuser_id,flag_1,days,-- 再继续对flag_1等差,这样算出来的相同的日期就是间隔了一天的date_sub(flag_1,interval row_number() over(partition by user_id order by flag_1) day) flag_2from (select -- 查询出绝对连续的天数user_id,flag_1,count(1) daysfrom (selectuser_id,login_date,-- 连续的日期flag_1是相同,而隔了一天的日期flag_1是差一天的DATE_SUB(login_date,interval row_number() over(partition by user_id order by login_date) day) flag_1from login) t1 group by user_id,flag_1) t2) t3 group by user_id,flag_2 )t4 group by user_id
方法二:现上分组法,灵活,可指定间隔n天连续
select-- 按id分组,求最大的连续天数user_id,max(continuous_login_days) max_continuous_login_days
from (select-- 将组内最大日期和最小日期相减+1就是连续天数user_id,datediff(max(login_date),min(login_date))+1 continuous_login_daysfrom (selectuser_id,login_date,-- 超过2天以上的新开一组,因为sum默认是最前行到当前行,差值不到2天的会sum(0),就等于没加-- 若断2天算连续,这里就改为sum(if(diff>3,1,0))sum(if(diff>2,1,0)) over(partition by user_id order by login_date) group_idfrom (selectuser_id,login_date,datediff(login_date,prev_day) diff -- 计算与前一天的差值from(selectuser_id,login_date,lag(login_date,1,"1970-01-01") over(partition by user_id order by login_date) prev_dayfrom login) t1 ) t2 ) t3group by user_id,group_id ) t4
group by user_id
结果:
user_id | max_continuous |
1001 | 7 |
1002 | 9 |
mysql/hive求最大连续天数(间隔1天也算连续)相关推荐
- mysql 连续天数_mysql计算连续天数,mysql连续登录天数,连续天数统计
mysql计算连续天数,mysql连续登录天数,连续天数统计 >>>>>>>>>>>>>>>>>& ...
- hive连续天数统计思路
测试数据: T1 Uid dt login_status(1登录成功,0异常) 1 2019-07-11 1 1 2019-07-12 1 1 2019-07-13 1 1 2019-07-14 1 ...
- Hive 统计连续天数
第一步:创建表 -- 创建表 create table if not exists continue_days( uid int comment '员工id', tdate string commen ...
- oracle求指定时间连续天数
需求:得到指定时间开始往前数连续的天数,如id为a的数据对应时间:20200115,20200114,20200112,20200101,给定查询时间为20200115,则连续天数为2,一中断就终止 ...
- Ubuntu18.04 MySQL+hive安装
Ubuntu18.04 MySQL+hive安装 参考文档.博客: https://blog.csdn.net/chengyuqiang/article/details/76757602 https: ...
- C语言实现“输入年月求对应月份天数”
C语言实现"输入年月求对应月份天数" 一.运行截图 二.源代码 一.运行截图 二.源代码 #include<stdio.h> main() {int x, y, a, ...
- 如何计算CDS view里两个时间戳之间的天数间隔
ABAP透明表里的时间戳,数据类型为dec: 有个需求:计算这两个时间戳之间的天数间隔,丢弃时间戳年-月-日8位后面的小时:分钟:秒. 举个例子:如果时间戳是20180918173132,丢弃1731 ...
- hadooppythonsql_半小时搞定Hadoop+Mysql+Hive+Python
1. 说明 搭建过Hadoop集群的小伙伴一定知道,如果不用docker,半小时配好Hadoop+Mysql+Hive(后简称Hive)肯定是胡吹,有了Docker镜像,没有说明文档,配好了也不一定会 ...
- hive 把mysql语句执行_R分别连接mysql hive执行操作
大半年忘记更新工作记录了,惭愧,慢慢补上. mysql/hive 是两类常用的不同类型的数据库,在数据操作上存在一定的区别. 1-MYSQL的连接. library(DBI) library(RMy ...
最新文章
- Go 分布式学习利器(20)-- Go并发编程之多路选择和超时控制,channel的关闭和广播
- android浮于上方布局,android-在FrameLayout中使RecyclerView上方的视图...
- 使用apache配置基于IP地址的虚拟主机
- 6-12mysql库的操作
- yii2中的rules验证规则
- mysqld:表mysql.plugin不存在_99%测试工程师不知道的数据库知识|干货
- Tecplot如何保存frame style 并调用frame style
- 帆软FineMobile 消息推送/定时调度
- python JEP安装
- 【Java EE】Day10 JavaScript高级、DOM、BOM、事件
- 【Java编码规范】《阿里巴巴Java开发手册(正式版)》
- Siemens M65...
- 开票接口系统能够解决的十大问题
- java 动态性之反射机制 详解 案例,java架构师技术图谱
- 数字逻辑计算机组成,数字逻辑设计与计算机组成pdf
- 困惑很久的解微分方程时绝对值取舍问题(必看)
- 十款强大的图像后期处理软件和工具
- 什么是异常?如何处理异常?
- 读书笔记 | 牧羊少年奇幻之旅
- 从计算机视觉角度深入解读了AR
热门文章
- 2022-2028年全球与中国工业分析软件市场现状及未来发展趋势分析报告
- java毕业设计的影视资讯管理系统mybatis+源码+调试部署+系统+数据库+lw
- springboot银行客户管理系统毕业设计源码250903
- 《web课程设计》用HTML CSS做一个简洁、漂亮的个人博客网站
- 学土木的考计算机二级的什么好些,学土木适合考计算机二级考什么?
- 高精度乘法(c++实现)
- Android NDK Camera2小结
- 2019,GECCO,Linear scaling with and within semantic backpropagation-based genetic programming for SR
- Perforce介绍
- python 分类变量xgboost_python小白之路:第十九章 XGBoost