hive_练习0419

--第一步:去重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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值