背景
已知:有個用戶登陸表,包含用戶id和用戶登陸時間,表名users
求:用戶連續登陸天數,和用戶最大連續登陸天數
思路:先把每個用戶按照登陸時間排序rn,在用登陸時間減rn得到一個值,如果值一樣,說明是一段的連續登陸,然後把不連續的天數去掉(上一步得到的值只有一個,說明是不連續的),然後得出每段連續的登陸
求連續登陸天數:
select userid,sum(sc) as sumdays from
(
select userid,date_sub,count(*) as sc from
(
select userid,logindate-rn as date_sub from
(
select userid,logindate,row_number() over (partition by userid order by logindate) as rn from users
)a
)b
group by userid, date_sub having count(*)>1
)d group by userid
求最大連續登陸天數
select userid,max(sc) as maxdays from
(
select userid,date_sub,count(*) as sc from
(
select userid,logindate-rn as date_sub from
(
select userid,logindate,row_number() over (partition by userid order by logindate) as rn from users
)a
)b
group by userid, date_sub having count(*)>1
)d group by userid