题解 | #统计活跃间隔对用户分级结果#

连续签到领金币

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

1)选出2021-07-07到2021-10-31期间签到的用户,按用户排序编号,用排序问题得到用户日期与编号之差,如果该值相等,则证明连续 select uid, date(in_time) as dt, date(in_time) - row_number() over ( partition by uid order by date(in_time) ) as oo from tb_user_log where artical_id = 0 and sign_in = 1 and date(in_time) between '2021-07-07' and '2021-10-31' 2)给选出的是否连续这一列排序,dense_rank()排序,之后按照uid和dens_rank()分组,根据规则计算积分,%7余数为3,0的分别赋值3,7,其他为0,但注意第一个周期的3,7得分也是3,7,用case when 进行汇总,之后再按要求进行细枝末节的调整即可,具体代码如下

select y.uid, y.dtm, sum( case when y.oor = 3 then 3 when y.oor = 7 then 7 when y.oor % 7 = 3 then 3 when y.oor % 7 = 0 then 7 else 1 end ) from ( select x.uid, x.oo, date_format(dt, '%Y%m') as dtm, dense_rank() over ( partition by x.uid, x.oo order by x.dt ) as oor from ( select uid, date(in_time) as dt, date(in_time) - row_number() over ( partition by uid order by date(in_time) ) as oo from tb_user_log where artical_id = 0 and sign_in = 1 and date(in_time) between '2021-07-07' and '2021-10-31' ) as x ) as y group by uid, y.dtm

全部评论

相关推荐

把实习生当正职使昨天第一天就加班,晚上连口饭都没吃上,以后日子咋过,我不想干了
码农索隆:实习不怕忙,就怕干的活重复且没难度,要干就干那种有深度有难度的任务,这样才能快速的提升
点赞 评论 收藏
分享
仁者伍敌:难怪小公司那么挑剔,让你们这些大佬把位置拿了
点赞 评论 收藏
分享
05-19 19:57
蚌埠学院 Python
2237:Gpa70不算高,建议只写排名,个人技能不在多而在精,缩到8条以内。项目留一个含金量高的,减少间距弄到一页,硕士简历也就一页,本科不要写很多
点赞 评论 收藏
分享
是每个人事都这样与找工作的人这样沟通吗?正常询问不可以吗
据说名字越长别人越关注你的昵称我觉得我要被关注了:excal 我还真不会
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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