連續登陸sql實現

背景

已知:有個用戶登陸表,包含用戶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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章