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

连续签到领金币

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

with t1 as (
  select uid,date(in_time) dayt,sign_in,datediff(lead(date(in_time)) over(partition by uid order by in_time),date(in_time)) as diff_d
from tb_user_log where date(in_time) BETWEEN '2021-7-7' and '2021-10-31'  and artical_id =0)
select uid,DATE_FORMAT(dayt,'%Y%m') as month,sum(score) as coin  from (
SELECT
uid,dayt,sign_in,diff_d,if(@uid=uid,if(sign_in=1 ,if (@diff =1 ,@day:=@day+1,@day:=1) ,@day:=0),@day:=1) as  day_s,@uid:=uid,@diff:=diff_d,
case  when    @day=0 then 0  when mod(@day,7)=3 then 3 when mod(@day,7)=0 then 7 else 1 end as score  
 from t1,(select @day := 1,@uid :=null,@diff:=1  )t 
)t
group by uid,DATE_FORMAT(dayt,'%Y%m') 
order by month,uid

要求条件
1、artical_id = 0
2、2021-7-7至2021-10-31 为止,如果in_time 不加date函数,会少算日子
3、未签到的日子金币为0
4、签到3、7为倍数的日子,金币为3,7其他结为1

上面答案使用变量完成,甚是复杂,后看了评论区后,还是自己思路不够开阔,不用变量简单很多。


select uid,DATE_FORMAT(dt,'%Y%m') month ,sum(grade) from
     (select uid ,dt,  
     case 
     when   mod( rank() over  (partition by uid,rank_day order by dt),7) =3 then 3     
     when   mod( rank() over (partition by uid,rank_day order by dt) ,7)=0 then 7 
     else 1   end   grade    
     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;

这种思路逻辑简洁,通过去掉sign=0等数据,然后利用排名生成连续的辅助列,然后利用两个分组排序,算出连续签到天数,根据得分规则打分即可。

第一个重点是可以想到生成连续的辅助列。

全部评论

相关推荐

03-03 23:12
已编辑
北京邮电大学 Java
书海为家:我来给一点点小建议,因为毕竟还在学校不像工作几年的老鸟有丰富的项目经验,面试官在面试在校生的时候更关注咱们同学的做事逻辑和思路,所以最好在简历中描述下自己做过项目的完整过程,比如需求怎么来的,你对需求的解读,你想到的解决办法,遇到困难如何找人求助,最终项目做成了什么程度,你从中收获了哪些技能,你有什么感悟。
你的简历改到第几版了
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
正在热议
更多
# 长得好看会提高面试通过率吗? #
3423次浏览 43人参与
# HR最不可信的一句话是__ #
1038次浏览 32人参与
# 巨人网络春招 #
11500次浏览 224人参与
# 春招至今,你的战绩如何? #
15286次浏览 141人参与
# AI面会问哪些问题? #
911次浏览 22人参与
# 你的实习产出是真实的还是包装的? #
2862次浏览 52人参与
# MiniMax求职进展汇总 #
25003次浏览 321人参与
# 沪漂/北漂你觉得哪个更苦? #
1361次浏览 40人参与
# 你做过最难的笔试是哪家公司 #
1161次浏览 20人参与
# AI时代,哪个岗位还有“活路” #
2736次浏览 50人参与
# XX请雇我工作 #
51149次浏览 171人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7982次浏览 43人参与
# 简历第一个项目做什么 #
32100次浏览 359人参与
# 简历中的项目经历要怎么写? #
310955次浏览 4260人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152854次浏览 889人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187566次浏览 1123人参与
# AI时代,哪些岗位最容易被淘汰 #
64582次浏览 867人参与
# 如果重来一次你还会读研吗 #
229990次浏览 2011人参与
# 投格力的你,拿到offer了吗? #
178284次浏览 891人参与
# 你怎么看待AI面试 #
180699次浏览 1298人参与
# 正在春招的你,也参与了去年秋招吗? #
364256次浏览 2641人参与
# 腾讯音乐求职进展汇总 #
160831次浏览 1114人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务