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

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

http://www.nowcoder.com/practice/16d41af206cd4066a06a3a0aa585ad3d

/* 首先要找到新登录的日期,应该为最小的那个日期; 其次利用日期差为1的限制条件判断第二次登陆是否为第二天; 分母应该是count(distinct user_id)---客户人数 */

/* 先取出离第一次登陆最近的那一次登陆的记录作为,时间为second_date; 开窗函数的dense_rank()可以避免在第一天登陆两次造成的二次登录错觉,直接把除开第一天登陆的第二次登陆记号为2 */

SELECT ROUND(SUM(if_save)/count(DISTINCT user_id),3) as p FROM (select t1.user_id,date, (case when TIMESTAMPDIFF(DAY,t1.date,t2.second_date)=1 then 1 else 0 end) as if_save from login t1 left JOIN (SELECT t4.user_id,t4.second_date FROM (SELECT t3.user_id,t3.date as second_date, DENSE_RANK() over(partition by t3.user_id order by t3.date ) as rank_num from login t3)t4 WHERE t4.rank_num=2)t2 ON t1.user_id=t2.user_id ) t;

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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