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 人的标识),就可以算出每一天的近一年购买人数。

月累

使用同样的方式可以构建月累,年累列。实现每一天都可以计算月累,年累。

年累