题解 | #连续签到领金币#

连续签到领金币

https://www.nowcoder.com/practice/aef5adcef574468c82659e8911bb297f






with a1 as (
    select distinct date(in_time) as in_time, uid, date_format(in_time, '%Y%m') as month, rank()over(partition by uid, date_format(in_time, '%Y%m') order by in_time) as rk
    from tb_user_log
    where in_time >= '2021-07-07' and date(in_time)<='2021-10-31' and artical_id = 0 and sign_in = 1
),
a2 as (
    select uid, date_sub(date(in_time), interval rk day) as continousday, month, in_time
    from a1
),
a3 as (
    select uid, month, rank()over(partition by uid, continousday order by in_time) as rn
    from a2 
),
a4 as (
    select uid, month, sum(case when rn%7= 3 then 3
                when rn%7= 0 then 7
                else 1 end) as coin
    from a3
    group by uid,month
)

select uid, month, coin
from a4
order by month, uid






全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务