题解 | #date()函数,以及窗口函数的使用#

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

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

select round((count(distinct t.user_id)*1.0)/(select count(distinct login.user_id) from login),3) p from 
(select *,min(date) over(partition by user_id) start_date from login) t
where date=date(start_date,'+1 day')
#注意关于时间日期的函数,有dateadd/datediff,前者是在日期中添加或减去指定时间间隔,datediff是返回两个日期间的时间,但是sqlite里没有datediff函数,所以只能用date(指定时间,‘+1 day’)来表示比指定时间多一天。所以对于次日留存的表示主要通过where条件来描述。dateadd(day,2,2014-05-05)/datediff(day/year/month/hour,startdate,enddate)
#该题用over(partition by)比用group by更合适,这样可以保留每一个用户的全部login记录,方便时间与初次登陆时间的对比
#另外使用group by时,所有的select里非聚合字段都要放在group by后面,但是over partiton by 不需要,它可以select *。
#求比率时,分子要记得乘以1.0,用round调整小数位数。如果不乘以1.0,两个int型数相除得到的依旧是int型,0.2/3/4都会变成0,以整数0出现,所以为了返回小于1的小数,必须乘以1.0。
#还有哦,根据形成表的先后顺序,给列名添加表源,乱添加是会报错的。
全部评论

相关推荐

感性的干饭人在线蹲牛友:🐮 应该是在嘉定这边叭,禾赛大楼挺好看的
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务