notebook/996eco/ads_996eco_index_ltv_d.sql

142 lines
3.7 KiB
MySQL
Raw Normal View History

2025-05-07 20:41:31 +08:00
--bizdate 20250431 bizmonth 20250401 bizmonth
CREATE TABLE datasci.ads_996eco_index_ltv_d (
index_type text,
data_day text,
is_box text,
acc_count bigint,
ltv0 bigint,
ltv1 bigint,
ltv2 bigint,
ltv3 bigint,
ltv4 bigint,
ltv5 bigint,
ltv6 bigint,
ltv7 bigint,
ltv8 bigint,
ltv9 bigint,
ltv10 bigint,
ltv11 bigint,
ltv12 bigint,
ltv13 bigint,
ltv14 bigint,
ltv15 bigint,
ltv16 bigint,
ltv17 bigint,
ltv18 bigint,
ltv19 bigint,
ltv20 bigint,
ltv21 bigint,
ltv22 bigint,
ltv23 bigint,
ltv24 bigint,
ltv25 bigint,
ltv26 bigint,
ltv27 bigint,
ltv28 bigint,
ltv29 bigint,
ltv30 bigint,
ltv31 bigint,
ltv45 bigint,
ltv60 bigint,
ltv90 bigint,
ltv120 bigint
);
DELETE FROM datasci.ads_996eco_index_ltv_d WHERE 1=1;
--------------------
with retention_new_acc as
(
select
t1.appid,t1.app_name,t1.channel,t1.event_time,t1.user_id,t1.ds::date as new_acc_dt,coalesce(t2.user_flag,'非盒子用户') as user_flag
from
(
select
account,appid,app_name,channel,event_time,user_id,ds,row_number() over(partition by user_id order by event_time asc) as rn
from
(
select
appid,gm.name as app_name,account,name_abbr,channel,event_time,user_id,ds
from public.ods_newly_account acc
inner join
(
select id,name,bind_game_id,a.account,b.name_abbr
from public.gm_apply a
left join public.dim_gm_info b on a.account=b.account
where bind_game_type=1
) gm on acc.appid=gm.id
) t
) t1
left join datasci.dws_plt_newly_account_d t2 on t1.user_id=t2.user_id
where rn=1
and t1.ds between '${hisdate}' and '${bizdate}'
--and user_id='1419067566'
),
retention_active_detail as
(
select
ds::date as dt,user_id
from public.ods_active_account t1
inner join
(
select id,name,bind_game_id
from public.gm_apply
where bind_game_type=1
) t2 on t1.appid=t2.id
where t1.ds>='${hisdate}' and t1.ds<=to_char(dateadd('${bizdate}'::date,31,'dd'),'yyyymmdd')
group by
ds::date,user_id
),
retention_rd as
(
select
user_flag,appid,app_name,channel,event_time,t1.user_id,new_acc_dt,t2.dt as act_dt,t2.dt-t1.new_acc_dt as rd
from retention_new_acc t1
left join retention_active_detail t2 on t1.user_id=t2.user_id
--left join
where t2.dt-t1.new_acc_dt in (0,1,7,14,30,60,90,180)
--t1.user_id='1419067566'
)
--
SELECT
'is_box_ltv' index_type,
t1.new_acc_dt data_day,
t1.user_flag is_box,
t1.new_user_num acc_count,
t2.ret_1 ltv1,
ret_7 ltv7,
ret_14 ltv14,
ret_30 ltv30,
ret_60 ltv60,
ret_90 ltv90,
ret_180 ltv180
FROM
(
select
user_flag ,new_acc_dt,uniq(user_id) as new_user_num
from retention_rd
where rd=0
group by
user_flag,new_acc_dt
) t1
left join
(
select
user_flag,new_acc_dt,
uniq(case when rd=1 then user_id else null end) as ret_1,
uniq(case when rd=7 then user_id else null end) as ret_7,
uniq(case when rd=14 then user_id else null end) as ret_14,
uniq(case when rd=30 then user_id else null end) as ret_30,
uniq(case when rd=60 then user_id else null end) as ret_60,
uniq(case when rd=90 then user_id else null end) as ret_90,
uniq(case when rd=180 then user_id else null end) as ret_180
from retention_rd
where rd>0
group by
user_flag,new_acc_dt
) t2 on t1.new_acc_dt=t2.new_acc_dt and t1.user_flag=t2.user_flag
;