SQL题目:计算连续登录的最大天数
已知有一张简单的用户登录表
uid | date |
---|---|
u1 | 2020/9/1 |
u1 | 2020/9/2 |
u1 | 2020/9/3 |
u1 | 2020/9/8 |
u1 | 2020/9/9 |
u2 | 2020/9/1 |
u2 | 2020/9/2 |
计算结果如下:
uid | max_day |
---|---|
u1 | 3 |
u1 | 2 |
u2 | 2 |
难点:由于用户u1有两次连续登录的记录,因此需要生成可以区别两次登录的标记
解决办法:可以利用开窗函数生成按日期升序的名次,将日期中的day提取出来,连续登录的天数与名次相减可以生成联系登录的标记
select u1.uid,u1.date,(day(u1.date)-row_number()
over (partition by u1.uid order by u1.date)) as num_1
from user_login_1 as u1