连续7天登录MySQL求解
Ptypora-copy-images-to: img
typora-root-url: img
1 建表语句
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for sqllevel7
-- ----------------------------
DROP TABLE IF EXISTS `orde`;
CREATE TABLE `orde` (`id` int(11) NOT NULL,`date` datetime NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;SET FOREIGN_KEY_CHECKS = 1;
2 创建数据
INSERT INTO `test`.`sqllevel7`(`id`, `date`) VALUES (1, '2019-01-01 00:00:00');
INSERT INTO `test`.`sqllevel7`(`id`, `date`) VALUES (1, '2019-01-02 00:00:00');
INSERT INTO `test`.`sqllevel7`(`id`, `date`) VALUES (1, '2019-01-03 00:00:00');
INSERT INTO `test`.`sqllevel7`(`id`, `date`) VALUES (1, '2019-01-04 00:00:00');
INSERT INTO `test`.`sqllevel7`(`id`, `date`) VALUES (1, '2019-01-05 00:00:00');
INSERT INTO `test`.`sqllevel7`(`id`, `date`) VALUES (1, '2019-01-06 00:00:00');
INSERT INTO `test`.`sqllevel7`(`id`, `date`) VALUES (1, '2019-01-07 00:00:00');
INSERT INTO `test`.`sqllevel7`(`id`, `date`) VALUES (1, '2019-01-08 00:00:00');
INSERT INTO `test`.`sqllevel7`(`id`, `date`) VALUES (4, '2019-01-01 00:00:00');
INSERT INTO `test`.`sqllevel7`(`id`, `date`) VALUES (2, '2019-01-02 00:00:00');
INSERT INTO `test`.`sqllevel7`(`id`, `date`) VALUES (3, '2019-01-03 00:00:00');
INSERT INTO `test`.`sqllevel7`(`id`, `date`) VALUES (4, '2019-01-04 00:00:00');
INSERT INTO `test`.`sqllevel7`(`id`, `date`) VALUES (5, '2019-01-05 00:00:00');
INSERT INTO `test`.`sqllevel7`(`id`, `date`) VALUES (6, '2019-01-06 00:00:00');
INSERT INTO `test`.`sqllevel7`(`id`, `date`) VALUES (7, '2019-01-07 00:00:00');
INSERT INTO `test`.`sqllevel7`(`id`, `date`) VALUES (8, '2019-01-08 00:00:00');
INSERT INTO `test`.`sqllevel7`(`id`, `date`) VALUES (9, '2019-01-01 00:00:00');
INSERT INTO `test`.`sqllevel7`(`id`, `date`) VALUES (9, '2019-01-02 00:00:00');
INSERT INTO `test`.`sqllevel7`(`id`, `date`) VALUES (9, '2019-01-03 00:00:00');
INSERT INTO `test`.`sqllevel7`(`id`, `date`) VALUES (9, '2019-01-04 00:00:00');
INSERT INTO `test`.`sqllevel7`(`id`, `date`) VALUES (9, '2019-01-06 00:00:00');
INSERT INTO `test`.`sqllevel7`(`id`, `date`) VALUES (9, '2019-01-09 00:00:00');
INSERT INTO `test`.`sqllevel7`(`id`, `date`) VALUES (9, '2019-01-10 00:00:00');
INSERT INTO `test`.`sqllevel7`(`id`, `date`) VALUES (9, '2019-01-13 00:00:00');
INSERT INTO `test`.`sqllevel7`(`id`, `date`) VALUES (1, '2019-01-02 15:55:00');
INSERT INTO `test`.`sqllevel7`(`id`, `date`) VALUES (2, '2019-01-02 15:22:00');
第一步:用户登录日期去重
select DISTINCT date(date) as 日期,id from orde;
第二步:用row_number() over()函数计数
select *,row_number() over(PARTITION by id order by 日期) as cum from (select DISTINCT date(date) as 日期,id from orde)a;
第三步:日期减去计数值得到结果
select *,date(日期)-cum as 结果 from (select *,row_number() over(PARTITION by id order by 日期) as cum from (select DISTINCT date(date) as 日期,id from orde)a)b;
第四步:根据id和结果分组并计算总和,大于等于7的即为连续登陆7天的用户
select id,count(*) from (select *,date(日期)-cum as 结果 from (select *,row_number() over(PARTITION by id order by 日期) as cum from (select DISTINCT date(date) as 日期,id from orde)a)b)c GROUP BY id,结果 having count(*)>=7;
CREATE TABLE `orde` (`id` int(11) NOT NULL,`date` datetime NULL DEFAULT NULL
)create table orde(id int,date date) row format
delimited fields terminated by ' ' ;
1 2019-01-01 00:00:00
1 2019-01-01 00:00:00
1 2019-01-02 00:00:00
1 2019-01-03 00:00:00
1 2019-01-04 00:00:00
1 2019-01-05 00:00:00
1 2019-01-06 00:00:00
1 2019-01-07 00:00:00
1 2019-01-08 00:00:00
4 2019-01-01 00:00:00
2 2019-01-02 00:00:00
3 2019-01-03 00:00:00
4 2019-01-04 00:00:00
5 2019-01-05 00:00:00
6 2019-01-06 00:00:00
7 2019-01-07 00:00:00
8 2019-01-08 00:00:00
9 2019-01-01 00:00:00
9 2019-01-02 00:00:00
9 2019-01-03 00:00:00
9 2019-01-04 00:00:00
9 2019-01-06 00:00:00
9 2019-01-09 00:00:00
9 2019-01-10 00:00:00
9 2019-01-13 00:00:00
1 2019-01-02 15:55:00
2 2019-01-02 15:22:00
hive sql
1 、 连续7天登录的用户
数据:
1,2019-07-11,1
1,2019-07-12,1
1,2019-07-13,1
1,2019-07-14,1
1,2019-07-15,1
1,2019-07-16,1
1,2019-07-17,1
1,2019-07-18,1
2,2019-07-11,1
2,2019-07-12,1
2,2019-07-13,0
2,2019-07-14,1
2,2019-07-15,1
2,2019-07-16,0
2,2019-07-17,1
2,2019-07-18,0
3,2019-07-11,1
3,2019-07-12,1
3,2019-07-13,1
3,2019-07-14,0
3,2019-07-15,1
3,2019-07-16,1
3,2019-07-17,1
3,2019-07-18,1
表结构:
create table ulogin( uid int, dt date, status int )row format delimited fields terminated by ',';
导入数据:
load data local inpath '/home/hadoop/data/ulogin.dat' into table ulogin;
解决问题步骤
1.使用 row_number 在组内给数据编号(rownum)
2.某个值 - rownum = gid,得到结果可以作为后面分组计算的依据
3.根据求得的gid,作为分组条件,求最终结果
1)首先使用的row_number 给日期排序:
select uid, dt, row_number() over (partition by uid order by dt) gid from ulogin where status=1;
2)通过date_sub来获取统一的日期
select uid, dt, date_sub(dt, row_number() over (partition by uid order by dt)) gid from ulogin where status=1;
3)拿到这个结果就很简单了 group by count having
select uid,count(gid)as gg from
(select uid, dt, date_sub(dt, row_number() over (partition by uid order by dt)) gid from ulogin where status=1) as tmp
group by uid,gid
having count(gid)>=7;
连续7天登录MySQL求解相关推荐
- MYSQL练习题:连续两天登录的游戏玩家比率
题目 Column Name Type player_id int device_id int event_date date games_played int (player_id,event_da ...
- SQL实现筛选出连续3天登录用户与窗口函数
阅读目录 还原试题 SQL窗口函数 一.窗口函数有什么用 二.什么是窗口函数 三.如何使用 1.专用窗口函数rank 2.其他专业窗口函数 3.聚合函数作为窗口函数 4.注意事项 四.总结 解题思路 ...
- 解决使用Navicat等工具进行连接登录mysql的1130错误,无法使用Ip远程连接的问题(mysql为8.0版本)
解决使用Navicat等工具进行连接登录mysql的1130错误,无法使用Ip远程连接的问题(mysql为8.0版本) 参考文章: (1)解决使用Navicat等工具进行连接登录mysql的1130错 ...
- mysql 5.7.17远端登陆_Mysql 5.7.17安装后登录mysql的教程
Mysql-5.7.17的安装在文章下面有介绍,大家可以参考下.下面先给大家介绍下Mysql 5.7.17安装后登录mysql的教程,一起看看吧. 在运行 ./bin/mysqld –initiali ...
- 登录MySQL非默认3306端口号的语句
登录Mysql一直找不报localhost(10061),经过我一天又一天的挣扎,发现我修改了默认端口号. 解决办法 加上-p端口号,很是优秀了.!
- mysql1045_win10系统登录mysql时报错1045的解决方案
在刚刚安装的win10系统下登录MySQL时遇到1045错误提示,该怎么办?这是很多用户最近都向小编反馈的问题,每位用户都表示因为这个问题非常头疼.为了让大家更好地使用win10系统,下面就分享登录m ...
- 2002无法连接mysql阿里云_2002无法登录MySQL服务器
提示:#2000 无法登录 MySQL 服务器今天用本机装了个phpMyAdmin,版本3.4.8,想用它来连一台内网服务器上的Mysql,于是乎修改phpMyAdmin配置文件config.inc. ...
- 登录MySQL数据库
用户启动了MySQL服务,便可以通过客户端登录MySQL数据库. 登录MySQL数据库的具体操作步骤如下: 步骤 1):单击"开始"→"Windows 系统"→ ...
- MySQL 高级 - 启动及登录MySQL
启动 MySQL 服务 service mysql startservice mysql stopservice mysql statusservice mysql restart 登录MySQL m ...
最新文章
- C#Winform窗体中传值
- python numpy筛选 总数
- 2016 CVPR 德州仪器 ADAS Tutorial
- 【opencv】4.初始化Mat的方式、访问cv::Mat中的某个元素
- shell-----函数库调用
- 如何更加进一步的找到相关的信息呢?
- 中国建设银行(2011.11.19南京大学)
- 前端学习(771):小结
- 比特币官方客户端钱包是用什么语言开发的_5种主流比特币客户端的开发选型...
- Java开发的可扩展-高性能-响应式的API网关-soul v2.2.1
- Eclipse启动SpringCloud微服务集群的方法
- Centos7下python3安装pip-9.0.1
- 解决windows 2003打了系统补丁后远程桌面不能用
- python运维常用脚本
- 基于javaweb的本科生实习管理系统
- 旧iPhone手机钱包中公交卡 银行卡 转移到新手机iPhone11上
- Failed to read artifact descriptor for com.google.errorprone:javac:jar:9+181-r4173-1
- 二手升腾网络计算机,瘦客户机终端网络计算机专用计算机
- 编程实现更改文件夹图标
- RE2:Simple and Effective Text Matching with Richer Alignment Features
热门文章
- TP-LINK路由器任意代码执行漏洞CVE-2017-9466 WR841N V8版本受影响
- 欧盟站POPs持久性有机污染物测试报告
- iTOP-4412开发板-10.1寸屏幕硬件修改支持排线和HDMI
- 超哥笔记--shell 基本命令(4)
- 祝福计算机学院十周年快乐用英语怎么说,计算机学院自动化专业十周年 庆典及颁奖典礼隆重举行...
- Mysql快速入门 在python、java使用
- Visdrone2019数据集.txt标签文件转换为voc格式.XML标签文件
- 第四章:你造吗?CMOS传感器的构成与关键
- 关于:last-child的误解
- 有如图所示的七巧板,试设计算法,使用至多4种不同颜色对七巧板进行涂色(每块七巧板一种颜色),要求相邻区域的颜色互补相同,打印输出所有可能的涂色方案。