hive中使用sql 統(tǒng)計(jì)連續(xù)出現(xiàn)n次的用戶

-- 有日志如下,請寫出代碼求得所有用戶和活躍用戶的總數(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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容