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

连续签到领金币

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

with t1 as(select a.uid, a.dt, a.rank_, dense_rank() over(partition by uid,a.dt-a.rank_ order by date(a.dt)) rank_1
from 
(select uid, date(in_time) dt, dense_rank() over(partition by uid order by date(in_time)) rank_
from tb_user_log
where date(in_time) between '2021-07-07' and '2021-10-31'
and sign_in=1
and artical_id=0)a
),
t2 as(select uid, dt, rank_1, 
case when rank_1%7=3 then 3 when rank_1%7=0 then 7 else 1 end coin
from t1)
select uid, date_format(dt,'%Y%m') month, sum(coin)
from t2
group by uid,month
order by month,uid

  • 连续日期用dense_rank和日期相减得到一个同一个日期,然后在用一次dense_rank得到连续日期的天数
  • 使用case when 得到对应的金币数
  • 第3天得到3金币
  • 第7天得到7金币
  • 注意限制
  • artical_id=0
  • sign_in=1
全部评论

相关推荐

06-26 22:20
门头沟学院 Java
码农索隆:让你把简历发给她,她说一些套话,然后让你加一个人,说这个人给你改简历,然后开始卖课
我的求职精神状态
点赞 评论 收藏
分享
06-10 21:15
门头沟学院 Java
宁阿:好多这种没🧠的公司,他们估计都不知道毕业的人不能给安排实习岗
实习吐槽大会
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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