题解 | #牛客每个人最近的登录日期(五)#

牛客每个人最近的登录日期(五)

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

  1. 使用lead函数和dense_rank函数,这个方法写起来最简单也容易理解,而且运行效率还比较高(配合next_day!=date条件和dense_rank()函数,能解决重复登录问题;其他答案多使用row_number()函数,这是不正确的,配到重复登录情况必出错)
select date,
ifnull(
round(
sum( case when r=1 and timestampdiff(day,date,next_day)=1 then 1 else 0 end)
/
sum(case when r=1 and next_day!=date then 1 else 0 end)
,3)
,0) as p 
from
(select user_id,date
,lead(date,1) over(partition by user_id order by date) next_day
,dense_rank() over(partition by user_id order by date) r
from login)b 
group by date
全部评论

相关推荐

搞机墨镜猫:科研和竞赛全写成项目经历,另外你项目涉及到的技术栈太杂了,应该对不同岗位强调写不同的技术栈,寒假应该不太好找短期,长期明年3,4月好找很多
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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