-- 有日志如下,请写出代码求得所有用户和活跃用户的总数及平均年龄。(活跃用户指连续两天都有访问记录的用户)
-- 日期 用户 年龄
-- 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
-- 连续两天的用户 活跃用户
-- 1 根据日期和user_id先去重 tmp1
select
date_day,
user_id
from
tbl
group by
date_day,user_id
-- 2 根据user_id分组,为每个用户的登陆记录按日期排序 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 根据user_id,date_diff分组 如果时间连续 则date_diff一致,判断此时分组数据的数量 tmp4
select
user_id
from
tmp3
group by
user_id,date_diff
having
count(*) >= 2