某大佬的思想,实在是太经典了,我们一起来膜拜!!!
如下为平台商品促销数据:字段为品牌,打折开始日期,打折结束日期 brand stt edt oppo 2021-06-05 2021-06-09 oppo 2021-06-11 2021-06-21 vivo 2021-06-05 2021-06-15 vivo 2021-06-09 2021-06-21 redmi 2021-06-05 2021-06-21 redmi 2021-06-09 2021-06-15 redmi 2021-06-17 2021-06-26 huawei 2021-06-05 2021-06-26 huawei 2021-06-09 2021-06-15 huawei 2021-06-17 2021-06-21 计算每个品牌总的打折销售天数,注意其中的交叉日期,比如vivo品牌,第一次活动时间为2021-06-05到2021-06-15,第二次活动时间为2021-06-09到2021-06-21其中9号到15号为重复天数,只统计一次,即vivo总打折天数为2021-06-05到2021-06-21共计17天。
首先让我们来认识几个函数
LanguageManual UDF - Apache Hive - Apache Software Foundation
posexplode (array) 给数组中的内容给一个 标号
space( ) 给空串 长度
select id, stt, edt, date_add(stt, pos-1), t.pos from( select id,stt,edt from brand ) tmp lateral view posexplode( split(space(datediff(edt, stt)+1), '') ) t as pos, val where t.pos <> 0
把时间拆 每个做活动的商品拆成 具体的某天!
下面是最后的代码 ,对每个商品做活动的时间进行去重就得到了结果!!
最后代码
select id, count(distinct date_add(stt, pos-1)) as day_count from( select id,stt,edt from brand ) tmp lateral view posexplode( split(space(datediff(edt, stt)+1), '') ) t as pos, val where t.pos <> 0 group by id
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)