#我这种办法和题解的办法都存在一个bug 就是在月底和新月的连续签到金币无法计算,比如说月底连续签到了6天 下一个月第一天签到按道理应该领取6金币 我这种写法就不行了 虽然过是过了 但还是想问有哪位大佬能帮我解决下这个问题吗 (tip:我这个方法是自己想的求连续天数的方法,结合了case when和sum开窗 比较巧妙 当然感觉不如传统的排序做差法好理解)

select A4.uid
,A4.dat dat2
,sum(A4.grp4) grp5
from(
    select A3.uid,A3.grp3,date_format(in_time,'%Y%m') dat,floor(count(*)/7)*15+if(count(*)%7>=3,(count(*)%7)+2,count(*)%7) grp4
    from(
        select A2.uid,A2.in_time,sum(A2.grp2)over(order by A2.id) grp3
        from(
            select A1.grp1 grp1
            ,A1.uid uid
            ,A1.id id
            ,A1.in_time
            ,case when A1.grp1 = 0 then 1 else 0 end grp2
            from(

                select uid
                ,in_time
                ,id
                ,if(ifnull(datediff(date_format(in_time,'%Y-%m-%d'),date_format(ifnull(lag(in_time,1)over(partition by uid order by in_time asc),in_time),'%Y-%m-%d')),0)<>1,0,1) grp1       
                from tb_user_log
                where in_time between '2021-07-07 0:00:00' and '2021-10-31 23:59:59'
                  and artical_id=0
                  and sign_in=1
            )as A1   
        )as A2
    )as A3
    group by A3.uid,A3.grp3,dat
 )as A4 
group by A4.uid,A4.dat
order by A4.uid asc