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

相关文章
相关标签/搜索