Hive sql 1:留存及连续留存

数据如下:用户ID及登陆日期

user_idlogin_date
10012024-08-01
10012024-08-03
10022024-08-01
10022024-08-02
10022024-08-03
10012024-08-07

1.每天1天内登陆,3天内登陆的用户数

思路:1).取每个用户下一次登陆的日期,用lead开窗

           2).当前日期和下一次登陆的日期比差值,

select login_date
       ,count( distinct if(date_diff(lead_login_date,login_date)<=1,user_id,null)) retail_1day_users
       ,count( distinct if(date_diff(lead_login_date,login_date)<=3,user_id,null)) retail_3day_users

from 
(
select user_id
       ,login_date
       ,lead(login,date) over (partition by user_id order by login_date asc) as lead_login_date
from dws_data
)

2 连续留存1,3,7天的用户数

思路:1)留存1天的,升序后,下一个日期是当前日期+1

             留存3天的,升序后,下三个日期是当前日期+3

select login_date
       ,count( distinct if(date_diff(lead1_login_date,login_date)=1,user_id,null)) retail_1day_users
       ,count( distinct if(date_diff(lead3_login_date,login_date)=3,user_id,null)) retail_3day_users
       ,count( distinct if(date_diff(lead7_login_date,login_date)<=7,user_id,null)) retail_1day_users


from 
(
select user_id
       ,login_date
       ,lead(login_date,1,'1970-01-01') over (partition by user_id order by login_date asc) as lead1_login_date
       ,lead(login_date,3,'1970-01-01') over (partition by user_id order by login_date asc) as lead3_login_date
,lead(login_date,7,'1970-01-01') over (partition by user_id order by login_date asc) as lead7_login_date
from dws_data
)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值