# 第二步: ranK()over(partition by uid order by dt) --按照签名排序 
# 第三步:date_sub(dt,interval ranK()over(partition by uid order by dt) 
#          按照签到日期减去签到排名的差值 排序,(如果是连续签到,则得到的日期相同)-- 即得到连续签到的天数,rank_day
# 第四步:rank()over(partition by uid,rank_day order by dt),按照连续签的天数到排序,在mod与7,即可以判断连续签到的天数是否可以达到额外加金币的条件


select
             
    uid,
    date_format(dt,'%Y%m') month,
    sum(coin) coin
from (
    select
        uid,
        dt,
        case when mod(rank()over(partition by uid,rank_day order by dt), 7)=0 then 7
             when mod(rank()over(partition by uid,rank_day order by dt), 7)=3 then 3
             else 1
             end  coin 
             --   按照rank_day排序的排名,与7求mod,
    from(
        select
            uid,
            dt,
             date_sub(dt,interval ranK()over(partition by uid order by dt) day ) rank_day--  签到日期减去签到排名,(如果是连续签到,则得到的日期相同),
        from (
            select
                distinct uid,  -- 去重 过滤掉重复签到的情况
                date(in_time) dt-- 登入日期 
            from tb_user_log
            where artical_id=0 and sign_in=1
                and date(in_time)  between '2021-07-07' and '2021-10-31'
            ) t1  
          ) t2
     ) t3
group by uid,month
order by  month,uid