平均次日留存率

一、思路:

(1)使用窗口函数,先按用户分组,再按日期升序排序,再两两拼接(最后一个默认和null拼接),即lead(date) over (partition by device_id order by date),用lead函数将同一用户连续两天的记录拼接起来。

(2)检查date2和date1的日期差是不是为1,是则为1(次日留存了),否则为0(次日未留存),取avg即可得平均概率。

二、代码:

select
    avg(if(datediff(date2,date1)=1,1,0)) as avg_ret
from
    (
        select distinct
            device_id,
            date as date1,
            #窗口函数
            lead (date) over (
                partition by
                    device_id
                order by
                    date
            ) as date2
        from
            (
                select distinct
                    device_id,
                    date
                from
                    question_practice_detail as a
            ) as a1
    ) as a2 

注:牛客网的在线编程题

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值