MySql 计算连续签到天数

MySql 计算连续签到天数

(如果中间间断连续签到,将会从1开始)

思路如下:

获取当前签到的最后时间(今天或昨天), 定义一个变量@i 对签到时间进行天数自减, 然后查询出当前记录签到时间是否与自减后的时间匹配.   如果匹配表示天数是连续时间. 




SELECT
    count( 1 ) 
FROM
    (
    SELECT
        date_sub( a.ct, INTERVAL 1 DAY ) signDate,
        ( @i := DATE_ADD( @i, INTERVAL - 1 DAY ) ) today 
    FROM
        ( SELECT ct FROM user_reach WHERE user_id = 14864795 ORDER BY ct DESC ) a
        INNER JOIN (
        SELECT
            @i := max( ct ) AS signMax 
        FROM
            user_reach 
        WHERE
            user_id = 14864795 
            AND ( TO_DAYS( ct ) = TO_DAYS( curdate()) OR TO_DAYS( ct ) = TO_DAYS( DATE_ADD( curdate(), INTERVAL - 1 DAY ) ) ) 
        ) b 
    WHERE
        b.signMax IS NOT NULL 
        AND TO_DAYS(
        DATE_ADD( @i, INTERVAL - 1 DAY )) = TO_DAYS( date_sub( a.ct, INTERVAL 1 DAY ) ) 
    ) c

 

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

oh LAN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值