sql逻辑题05

每个用户连续登录最大天数
数据准备:
--创建表
create table user_login(
user_id varchar(20),
login_date date
);

--导入数据
insert into user_login values
('zhangsan','2013-05-06')  
,('zhangsan','2013-05-07')
,('zhangsan','2013-05-08')
,('zhangsan','2013-05-09')
,('zhangsan','2013-06-23')
,('zhangsan','2013-06-24')
,('zhangsan','2013-06-25')
,('zhangsan','2013-06-26')
,('zhangsan','2013-06-27')
,('lisi','2013-07-06')
,('lisi','2013-07-07')
,('lisi','2013-07-08')
,('lisi','2013-07-09')
,('lisi','2013-08-01')
,('lisi','2013-08-02')
,('lisi','2013-09-10')
,('wangwu','2015-09-01')
,('wangwu','2015-09-02')
,('wangwu','2015-09-03')
,('wangwu','2015-09-06')
,('wangwu','2015-09-07');

从数据中我们可以看的出来user_id为’zhangsan‘的客户最大连续登陆天数为5,’lisi‘最大登陆天数为4,'wangwu'最大登陆天数为3.

sql实现:

select t3.user_id,max(c1)
   from (
select t2.user_id as user_id
      ,t2.c       as c
      ,count(1)   as c1
      from
(
select  t1.user_id     as user_id
       ,t1.login_date  as login_date
       ,t1.rn          as rn
       ,(t1.login_date-t1.rn) c
 from(
select user_id
      ,login_date
      ,row_number() over(partition by user_id order by login_date) rn 
      from user_login
      )t1
      )t2
      group by t2.user_id,t2.c
      )t3
      group by 1

实现效果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

宇智波天坪小梁

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

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

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

打赏作者

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

抵扣说明:

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

余额充值