查询用户连续登录的天数

1、根据数据的日期进行去重,得到数据(如果没有重复数据可以忽略)例:

select distinct l.time day,  l.name  from logs l 

2、在第一步的基础上查询,使用rank() over () 函数根据名称分组,

根据日期排序(res1是上一步求出的数据) 例:

select t1.*,rank() over( partition by t1.name order by t1.day ) num from  res1 t1

3、 根据上一步的求出来的结果,使用date_sub()函数 求出 日期和排序后值的差值 (res2是上一步求出的数据)例:

select r.*, date_sub(r.day, r.num) cha from res2 r

4、根据差值和名字进行分组 ,并用count()函数计算个数,个数即为该用户连续登录的天数 (res3是上一步求出的数据) 例:

select r.name, r.cha, count(*) cnt from res3 r group by r.name, r.cha having cnt >= 3

完整代码展示

SELECT
	m3.NAME,
	m3.cha,
	count(*) cnt
FROM
	(
	SELECT
		m2.*,
		date_sub( m2.DAY, m2.num ) cha
	FROM
		(
		SELECT
			m1.*,
			rank () over ( PARTITION BY m1.NAME ORDER BY m1.DAY ) num
		FROM
			( SELECT DISTINCT REPLACE ( m.date, '/', '-' ) DAY, m.NAME FROM movies m ) m1
		) m2
	) m3
GROUP BY
	m3.cha,
	m3.NAME
HAVING
	cnt >=3

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值