Hive sql 面试题-统计每个品牌的总的营销天数

本文详细描述了如何使用SQL查询统计华为、小米和苹果等品牌的营销活动总天数,包括计算连续天数和累计天数的过程。
摘要由CSDN通过智能技术生成
  1. 统计每个品牌的总的营销天数
create table marking (brand string ,startdate string ,enddate string );

insert into marking VALUES('华为','2018-08-04','2018-08-05');
insert into marking VALUES('华为','2018-08-04','2020-12-25');
insert into marking VALUES('小米','2018-08-15','2018-08-20');
insert into marking VALUES('小米','2020-01-01','2020-01-05');
insert into marking VALUES('苹果','2018-09-01','2018-09-05');
insert into marking VALUES('苹果','2018-09-03','2018-09-06');
insert into marking VALUES('苹果','2018-09-09','2018-09-15');
t1:

select  brand, startdate, enddate ,min(startdate) over(partition by brand )  min_date , max(enddate) over(partition by brand)  max_date, max(enddate) over(partition by brand order by startdate asc rows between  unbounded preceding and 1 preceding  )  last_date from marking ;     
t2:
select brand, startdate, enddate, datediff(max_date ,min_date) as all_date , if( datediff(startdate,last_date ) <=0 , 0 , datediff(startdate,last_date)-1  ) as differ_date
from t1
t3:
select brand,startdate,enddate,max(all_date) - sum(differ_date ) as tianshu from t2;
select brand,startdate,enddate,max(all_date) - sum(differ_date ) as tianshu from (
      select brand, 
           startdate, 
           enddate,
           min_date,
           max_date, 
           datediff(max_date ,min_date) +1  all_date , 
           if( datediff(startdate,last_date ) <=0 , 0 , datediff(startdate,last_date)-1  )  differ_date
    from (
      select  brand, startdate, enddate ,
      min(startdate) over(partition by brand )  min_date , 
      max(enddate) over(partition by brand)  max_date, 
      max(enddate) over(partition by brand order by startdate asc rows between  unbounded preceding and 1 preceding  )  last_date 
      from marking  
    ) t1
) t2 ;
  • 11
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值