当前位置:   article > 正文

SQL题-连续三天活跃用户统计_sql 连续三天有记录

sql 连续三天有记录
--活跃用户统计
CREATE TABLE db.test5(
dt string,
user_id string,
age int)
ROW format delimited fields terminated BY ',';
INSERT overwrite TABLE db.test5 VALUES ('2019-02-11','test_1',23),
('2019-02-11','test_2',19),
('2019-02-11','test_3',39),
('2019-02-11','test_1',23),
('2019-02-11','test_3',39),
('2019-02-11','test_1',23),
('2019-02-12','test_2',19),
('2019-02-13','test_1',23),
('2019-02-15','test_2',19),
('2019-02-16','test_2',19);
-- 需求有日志如下,请写出代码求得所有用户和活跃用户的总数及平均年龄。
-- (活跃用户指连续两天都有访问记录的用户)

-- 有日志如下,请写出代码求得所有用户和活跃用户的总数及平均年龄。(活跃用户指连续三天都有访问记录的用户)
-- type     总数   平均年龄
-- '所有用户'  3    27
-- '活跃用户'  1    19
-- 方式1:join
-- 1- 给原表增加一列:date_add(dt,1) tomorrow
-- 2- 使用新增加的列与原来的表进行join on dt=tomorrow
-- 3- 根据用户id进行去重 然后计算年龄平均值 avg(age)

代码如下:

-- 方式二:row_number()
-- 1- 先对数据进行全局去重
-- 2- 先增加分组排名列 rn
-- 3- 通过当前的dt 减去 rn 得到一个新的日期 new_dt
-- 4- 根据user_id 和 new_dt进行分组,求count(new_dt) >=n,过滤出新的日期相同的用户id

代码如下:

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号