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求解相关推荐

  1. MYSQL练习题:连续两天登录的游戏玩家比率

    题目 Column Name Type player_id int device_id int event_date date games_played int (player_id,event_da ...

  2. SQL实现筛选出连续3天登录用户与窗口函数

    阅读目录 还原试题 SQL窗口函数 一.窗口函数有什么用 二.什么是窗口函数 三.如何使用 1.专用窗口函数rank 2.其他专业窗口函数 3.聚合函数作为窗口函数 4.注意事项 四.总结 解题思路 ...

  3. 解决使用Navicat等工具进行连接登录mysql的1130错误,无法使用Ip远程连接的问题(mysql为8.0版本)

    解决使用Navicat等工具进行连接登录mysql的1130错误,无法使用Ip远程连接的问题(mysql为8.0版本) 参考文章: (1)解决使用Navicat等工具进行连接登录mysql的1130错 ...

  4. mysql 5.7.17远端登陆_Mysql 5.7.17安装后登录mysql的教程

    Mysql-5.7.17的安装在文章下面有介绍,大家可以参考下.下面先给大家介绍下Mysql 5.7.17安装后登录mysql的教程,一起看看吧. 在运行 ./bin/mysqld –initiali ...

  5. 登录MySQL非默认3306端口号的语句

    登录Mysql一直找不报localhost(10061),经过我一天又一天的挣扎,发现我修改了默认端口号. 解决办法 加上-p端口号,很是优秀了.!

  6. mysql1045_win10系统登录mysql时报错1045的解决方案

    在刚刚安装的win10系统下登录MySQL时遇到1045错误提示,该怎么办?这是很多用户最近都向小编反馈的问题,每位用户都表示因为这个问题非常头疼.为了让大家更好地使用win10系统,下面就分享登录m ...

  7. 2002无法连接mysql阿里云_2002无法登录MySQL服务器

    提示:#2000 无法登录 MySQL 服务器今天用本机装了个phpMyAdmin,版本3.4.8,想用它来连一台内网服务器上的Mysql,于是乎修改phpMyAdmin配置文件config.inc. ...

  8. 登录MySQL数据库

    用户启动了MySQL服务,便可以通过客户端登录MySQL数据库. 登录MySQL数据库的具体操作步骤如下: 步骤 1):单击"开始"→"Windows 系统"→ ...

  9. MySQL 高级 - 启动及登录MySQL

    启动 MySQL 服务 service mysql startservice mysql stopservice mysql statusservice mysql restart 登录MySQL m ...

最新文章

  1. C#Winform窗体中传值
  2. python numpy筛选 总数
  3. 2016 CVPR 德州仪器 ADAS Tutorial
  4. 【opencv】4.初始化Mat的方式、访问cv::Mat中的某个元素
  5. shell-----函数库调用
  6. 如何更加进一步的找到相关的信息呢?
  7. 中国建设银行(2011.11.19南京大学)
  8. 前端学习(771):小结
  9. 比特币官方客户端钱包是用什么语言开发的_5种主流比特币客户端的开发选型...
  10. Java开发的可扩展-高性能-响应式的API网关-soul v2.2.1
  11. Eclipse启动SpringCloud微服务集群的方法
  12. Centos7下python3安装pip-9.0.1
  13. 解决windows 2003打了系统补丁后远程桌面不能用
  14. python运维常用脚本
  15. 基于javaweb的本科生实习管理系统
  16. 旧iPhone手机钱包中公交卡 银行卡 转移到新手机iPhone11上
  17. Failed to read artifact descriptor for com.google.errorprone:javac:jar:9+181-r4173-1
  18. 二手升腾网络计算机,瘦客户机终端网络计算机专用计算机
  19. 编程实现更改文件夹图标
  20. RE2:Simple and Effective Text Matching with Richer Alignment Features

热门文章

  1. TP-LINK路由器任意代码执行漏洞CVE-2017-9466 WR841N V8版本受影响
  2. 欧盟站POPs持久性有机污染物测试报告
  3. iTOP-4412开发板-10.1寸屏幕硬件修改支持排线和HDMI
  4. 超哥笔记--shell 基本命令(4)
  5. 祝福计算机学院十周年快乐用英语怎么说,计算机学院自动化专业十周年 庆典及颁奖典礼隆重举行...
  6. Mysql快速入门 在python、java使用
  7. Visdrone2019数据集.txt标签文件转换为voc格式.XML标签文件
  8. 第四章:你造吗?CMOS传感器的构成与关键
  9. 关于:last-child的误解
  10. 有如图所示的七巧板,试设计算法,使用至多4种不同颜色对七巧板进行涂色(每块七巧板一种颜色),要求相邻区域的颜色互补相同,打印输出所有可能的涂色方案。