mysql查询最近连续登录和累计登录

这条sql写了一天,百度无数,终于摸到点门路

需求是查询从当前日期向前推的连续登录,比如一个用户他今天登录了,昨天没登,连续登录为1

他昨天前天都登录了,今天没登录,连续登录为0

    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
 

转载于:https://my.oschina.net/EvanDev/blog/3064179

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值