【MySQL】MySQL统计连续登录3天的用户

需求

假设有下列表(user_login),第一列为id,第二列为登陆时间(dt),该表记录了每个id的登陆时间
在这里插入图片描述

现在要统计指定7天内连续登录3天以上的用户,结果如下
在这里插入图片描述

解决方案

  1. 由于存在同一用户同一天内多次登陆的情况,因此第一步需要对id和登陆时间按date进行去重,即
SELECT DISTINCT
	id,
	date( dt ) AS dt 
FROM
	user_login 
WHERE
	dt BETWEEN '2022-10-06' AND '2022-10-12';

在这里插入图片描述

  1. 需要对连续登录进行判断,观察可以看到:如果按登录日期排序,并且使用登陆日期减去排序序号的话,连续登录的日期会得到相同结果
    在这里插入图片描述

  2. 因此,最后再对id和d进行分组统计数量,再利用having筛选统计数量大于等于3的结果

SELECT
	id,	count( 1 ) AS '连续登录天数' 
FROM
	(
	SELECT 
		id, DATE_SUB(dt, INTERVAL ROW_NUMBER() over (PARTITION BY id ORDER BY dt) DAY) AS d 
	FROM
		( SELECT DISTINCT id, date( dt ) AS dt FROM user_login WHERE dt BETWEEN '2022-10-06' AND '2022-10-12' ) t_distinct ) t
GROUP BY
	id,	d 
HAVING
	`连续登录天数` >= 3;

在这里插入图片描述

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

@苏丶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值