Hive不支持不等值连接;构建近一年的日期辅助列
不等值连接指的是 ON 条件中出现不等式,HIVE暂时不支持这种写法。
改成用INNER JOIN + WHERE 的方式
with date_para as (
select
period_date,
date_sub(period_date,366) as year_ago
from dim.dim_app_period_d
where year>2019
)
select
a.period_date,
b.period_date,
b.year_ago
from date_para a
inner join date_para b on 1=1
WHERE a.period_date >= b.year_ago and a.period_date < b.period_date
and year(a.period_date)=2020 and year(b.period_date)=2020
order by a.period_date desc;
dim.dim_app_period_d 含有一个日期列,包含2020年的每一天period_date
data_para新增了一个列year_ago,表示365天以前。
最后结果
案例介绍:
经常需要统计每一天的近一年的去重结果,比如购买人数(如果不去重就可以用窗口函数)
可以直接inner join 上述的结果表,然后按period_date, year_ago group by算count(distinct 人的标识),就可以算出每一天的近一年购买人数。
月累
使用同样的方式可以构建月累,年累列。实现每一天都可以计算月累,年累。