连续登陆天数sql

连续登陆天数sql

1. 创建模拟数据

CREATE TABLE user_login ( user_id VARCHAR ( 100 ), login_time datetime );
INSERT INTO user_login
VALUES
	( 1, '2016-11-25 13:30:45' ),
	( 1, '2016-11-24 13:30:45' ),
	( 1, '2016-11-24 10:30:45' ),
	( 1, '2016-11-24 09:30:45' ),
	( 1, '2016-11-23 09:30:45' ),
	( 1, '2016-11-10 09:30:45' ),
	( 1, '2016-11-09 09:30:45' ),
	( 1, '2016-11-01 09:30:45' ),
	( 1, '2016-10-31 09:30:45' ),
	( 2, '2016-11-25 13:30:45' ),
	( 2, '2016-11-24 13:30:45' ),
	( 2, '2016-11-23 10:30:45' ),
	( 2, '2016-11-22 09:30:45' ),
	( 2, '2016-11-21 09:30:45' ),
	( 2, '2016-11-20 09:30:45' ),
	( 2, '2016-11-19 09:30:45' ),
	( 2, '2016-11-02 09:30:45' ),
	( 2, '2016-11-01 09:30:45' ),
	( 2, '2016-10-31 09:30:45' ),
	( 2, '2016-10-30 09:30:45' ),
	( 2, '2016-10-29 09:30:45' );
CREATE TABLE user_login_date ( SELECT user_id, DATE( login_time ) FROM user_login );
SELECT
	* 
FROM
	user_login_date;

部分截图
在这里插入图片描述

sql 代码

USE user_login;-- SHOW TABLES;
CREATE TABLE rklogin ( SELECT user_id, date, rank () over ( PARTITION BY user_id ORDER BY date ) rk FROM user_login_date );
SELECT
	* 
FROM
	rklogin;
SELECT
	user_id,
	MIN( date ) 连续登陆起始日期,
	MAX( date ) 连续登陆结束日期,
	COUNT( date ) 
FROM
	( SELECT *, date_sub( date, INTERVAL rk DAY ) 辅助日期列 FROM rklogin ) a 
GROUP BY
	user_id,辅助日期列;

在这里插入图片描述

注意 date_sub() rank() partition by 的用法!
还有 DATE_SUB(date,INTERVAL expr type)
😃

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

没有人给他写信的牡丹程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值