mysql查詢最近連續登陸和累計登陸

這條sql寫了一天,百度無數,終於摸到點門路sql

需求是查詢從當前日期向前推的連續登陸,好比一個用戶他今天登陸了,昨天沒登,連續登陸爲1優化

他昨天前天都登陸了,今天沒登陸,連續登陸爲0.net

    SELECT
        user_id,
        MIN(created_ymd) as start,
        MAX(created_ymd) as end,
        (MAX(created_ymd)-MIN(created_ymd))+1 as day_rank    #最大的連續日期減去最小的日期=連續登陸天數
    FROM
        (
            SELECT
                user_id,
                created_ymd,
                IF (
                    @user_id = created_ymd ,@rn :=@rn + 1,
                    @rn := 1
                ) AS con_col,
                @rwn :=@rwn + 1 AS help_col ,
                @user_id := created_ymd + 1
            FROM
                (SELECT * from datacenter.prod_ods_useronlinetime GROUP BY user_id,created_ymd
                )d,  #先把數據格式優化下,去掉重複數據,由於這個表裏一個用戶會有多條重複數據,只是時分秒不同,主要是用來統計用戶在線時長的
            
                (SELECT
                        @user_id := '' ,@rn := 0 ,@rwn := 0
                ) a
            #WHERE user_id = "0023e877e93b4723af9ffc8c4cf9c0f9"    #去掉這個條件==篩選全部的用戶
        ) c
    GROUP BY
        con_col - help_col
    HAVING
        count(1) > 1 AND MAX(created_ymd)=DATE_FORMAT(NOW(),'%Y%m%d')  #max那一行是對結果數據時行篩選,最大日期是今天開始向前推;若是隻須要計算連續登陸而不是最近的,去掉這個條件就好了
    ORDER BY user_id
 get

相關文章
相關標籤/搜索