0
点赞
收藏
分享

微信扫一扫

hive_练习0419

8052cf60ff5c 2022-04-19 阅读 30
hive

--第一步:去重t1,并保留最新状态得到所有用户的状态

--第二步:去重t2,并保留最新状态
create table t2_temp as
select
    t1.updatetime, t1.userid, t2.statu, t2.pt_d
from
(
select
     updatetime
    ,userid
from (
select
    MAX(updatetime) over(partition by userid) as updatetime
   ,userid
from  default.t2_stastus_new_user)tt1
group by updatetime
    ,userid)t1
left join
(
select
    updatetime,userid,statu,pt_d
from  default.t2_stastus_new_user
where pt_d<= '0407') t2
on t1.userid=t2.userid and t1.updatetime=t2.updatetime

---第三步  t2_temp left join t1
求用户数


select
    pt_d
    ,bind_user_flag+bind_new_user_flag  as bind_users
    ,unbind_user_flag
    ,bind_user_flag+bind_new_user_flag-unbind_user_flag  as in_bind_users
from (
select
    pt_d
    ,sum(`if`(bind_user_flag>0,1,0)) as bind_user_flag
    ,sum(`if`(bind_new_flag>0,1,0)) as bind_new_user_flag
    ,sum(`if`(unbind_flag>0,1,0)) as unbind_user_flag
from (
select
       pt_d
    ,updatetime
     ,userid
    ,statu
     ,t3.statu_flag
     ,sum(`if`((statu = '1' and statu_flag = '0'),1,0)) as bind_user_flag
     ,sum(`if`((statu = '1' and statu_flag is null),1,0)) as bind_new_flag
     ,sum(`if`((statu = '0' and t3.statu_flag = '1'),1,0)) as unbind_flag
from
(select  t2.updatetime,t2.userid,t2.statu,t1.statu as statu_flag,t2.pt_d
from
(select
    updatetime,userid,statu,pt_d
from t2_temp) t2
left join
(
    select  updatetime,userid,statu
    from  t1_stastus_all_user
    )t1
on t2.userid = t1.userid)t3
group by pt_d
    ,updatetime
     ,userid
    ,statu
     ,statu_flag
order by userid)t4
group by  pt_d)t5
 

举报

相关推荐

0 条评论