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

连续签到领金币

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

select t2.uid,DATE_FORMAT(t2.dt,'%Y%m') month,sum(t2.coin) coin
from(
    -- 计算用户当天的连续签到数和领取的金币数
        select *,DENSE_RANK() over(partition by t1.uid,t1.dt2 order by t1.dt) day_rk, -- 计算当天连续签到天数,按照用户id和日期-排名的差来分组
                        -- 当天连续签到天数%7=3 则领取3金币
                        -- 当天连续签到天数%7=0 则领取7金币
                        -- 其余情况,领取1金币
                        (case when DENSE_RANK() over(partition by t1.uid,t1.dt2 order by t1.dt)%7=3 then 3
                                 when DENSE_RANK() over(partition by t1.uid,t1.dt2 order by t1.dt)%7=0 then 7
                        else 1 end ) coin
        from(
            -- 计算用户每天的签到表并对签到表按时间进行排序
                select uid,date(in_time) dt,DENSE_RANK() over(partition by uid order by date(in_time)) rk,
                             -- 如果签到日期是连续的,则签到日期-排序得到的差相同
                             date(in_time)-DENSE_RANK() over(partition by uid order by date(in_time)) dt2
                from tb_user_log
                where date(in_time) between '2021-07-07' and '2021-10-31' and artical_id=0 and sign_in=1

        )t1
)t2
group by t2.uid,DATE_FORMAT(t2.dt,'%Y%m')
order by t2.uid,DATE_FORMAT(t2.dt,'%Y%m')

全部评论

相关推荐

06-03 15:32
点赞 评论 收藏
分享
程序员牛肉:主要是因为小厂的资金本来就很吃紧,所以更喜欢有实习经历的同学。来了就能上手。 而大厂因为钱多,实习生一天三四百的就不算事。所以愿意培养你,在面试的时候也就不在乎你有没有实习(除非是同级别大厂的实习。) 按照你的简历来看,同质化太严重了。项目也很烂大街。 要么换项目,要么考研。 你现在选择工作的话,前景不是很好了。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务