数据开发面试常用sql(计算留存、连续活跃)

计算某日志中连续活跃天数

类似问题:

  1. 找出连续活跃天数大于7天的用户
  2. 计算连续活跃天数大于7天的用户总数

思路 :

  1. 子查询:先按uid分窗口排序,按照登陆日期排序
  2. 外层:使用 date_sub 控制连续
  3. sql如下(灵活使用)
    select uid, count(*) from (select uid,login_date,row_number()over(partition by uid order by login_date desc) rm from user_au) tmp group by uid,date_sub(login-date,rm) having count>=7 --连续活跃7天的

计算某日志中连续不活跃天数

类似问题:

  1. 找出连续不活跃天数大于7天的用户
  2. 计算连续不活跃天数大于7天的用户总数

思路 :

  1. 子查询:先按uid分窗口排序,取窗口当前行和前一行
  2. 子查询:时长相减,并排序
  3. 外层:取最大
  4. sql如下(灵活使用)
    select uid,gap_day from (select uid,login_date-rm as gap_day,row_number() over(partition by uid order by login_date-rm desc ) rn from (select uid,login_date,lag(login_date,1)over(partition by uid order by login_date desc) rm from user_au)tmp )tmp1 where rn=1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值