一般在hive中求同比環比都需要表自關聯,其實還有一種更優雅的辦法。
hive中有個lag函數,正好可以用於求同比環比,不過要求數據比較完整
LAG(col,n,DEFAULT) 用於統計窗口內往上第n行值
第一個參數為列名,
第二個參數為往上第n行(可選,默認為1),
第三個參數為默認值(當往上第n行為NULL時候,取默認值,如不指定,則為NULL)
num1即為上個月的值,num2即為12個月之前的值
select year_id,month_id,num, lag(num,1,0) over (order by year_id,month_id) num1, lag(num,12,0) over (order by year_id,month_id) num2, num/(lag(num,1,0) over (order by year_id,month_id))-1 as num3, num/(lag(num,12,0) over (order by year_id,month_id))-1 as num4 from (select year_id, month_id, count(distinct prem_id) as num from cisadm_dwd.dwd_cis_wo_repair_di group by year_id,month_id order by year_id,month_id)a