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

连续签到领金币

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

题解: 从结果出发,用需要的数据形式倒推逻辑

知识点:

  • 日期格式化函数求月份、标准日期 date_format(dt, '[format]')
  • dense_rank()和rank()的区别,对于并列的情况,dense_rank排序出来是连续的,而rank可能因为间断而跳过一些数字
  • 窗口函数partition by的灵活应用,partition by不仅限于某一列,也会包含特定的字段
select uid,
date_format(dt, '%Y%m') mon,
sum(case (continue_dt % 7) 
    when 3 then 3
    when 0 then 7
   else 1 end) coin
from 
(
select uid,
dt,
dense_rank() over(partition by date_sub(dt, INTERVAL rk day) order by dt asc) continue_dt
from 
(
select distinct uid, 
date(in_time) dt,
dense_rank() over(partition by uid order by date(in_time) asc) rk
from tb_user_log
where artical_id = 0
and sign_in = 1
and in_time between '2021-07-07' and '2021-11-01'
) t1 
    ) t2
    group by 1, 2 
    order by 2, 1
全部评论

相关推荐

03-10 11:23
门头沟学院 Java
鹿LF:计算机面试就跟数学题一样,没什么实际价值,但只能这么筛选,本质是考察你的努力,智力和学习能力
点赞 评论 收藏
分享
04-03 22:41
兰州大学 C++
老六f:有时候是HR发错了,我之前投的百度的后端开发,他给我发的算法工程师,但是确实面的就是百度开发
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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