-- 有日志如下,請寫出代碼求得所有用戶和活躍用戶的總數(shù)及平均年齡。(活躍用戶指連續(xù)兩天都有訪問記錄的用戶)
-- 日期 用戶? 年齡
--? 11? test_1? 23? ? ? ? tmp1? ? ? ? ? ? ? ? tmp2? ? ? ? ? ? tmp3? ? ? ? ? tmp4
--? 11? test_2? 19? ? ? ? 11,test_1,23? ? ? ? 11,test_1,1? ? test_1,10
--? 11? test_3? 39? ? ? ? 11,test_2,19? ? ? ? 13,test_1,2? ? test_1,11
--? 11? test_1? 23? ? ? ? 11,test_3,39? ? ? ? 11,test_2,1? ? test_2,10
--? 11? test_3? 39? ? ? ? 12,test_2,19? ? ? ? 12,test_2,2? ? test_2,10? ? test2
--? 11? test_1? 23? ? ? ? 13,test_1,23? ? ? ? 11,test_3,1? ? test_3,10
--? 12? test_2? 19
--? 13? test_1? 23
-- 連續(xù)兩天的用戶 活躍用戶
-- 1 根據(jù)日期和user_id先去重 tmp1
select
? ? date_day,
? ? user_id
from
? ? tbl
group by
? ? date_day,user_id
-- 2 根據(jù)user_id分組,為每個(gè)用戶的登陸記錄按日期排序 tmp2
select
? ? user_id,
? ? date_day,
? ? rank() over(partition by user_id order by date_day) as rk
from
? ? tmp1
-- 3 獲取日期與排名的差 tmp3
select
? ? user_id,
? ? date_sub(date_day,rk) as date_diff
from
? ? tmp2
-- 4 根據(jù)user_id,date_diff分組 如果時(shí)間連續(xù) 則date_diff一致,判斷此時(shí)分組數(shù)據(jù)的數(shù)量 tmp4
select
? ? user_id
from
? ? tmp3
group by
? ? user_id,date_diff
having
? ? count(*) >= 2