mysql - 获取按日期分组的最近 n 天的活跃用户数量

标签 mysql hive hiveql

假设我有一个 Hive 表 logins包含以下列:

user_id | login_timestamp

我现在有兴趣获取一些事件 KPI。例如,每日活跃用户:

SELECT 
to_date(login_timestamp) as date,
COUNT(DISTINCT user_id) daily_active_user
FROM
logins
GROUP BY to_date(login_timestamp)
ORDER BY date asc

将其从每日活跃更改为每周/每月活跃并不是什么大问题,因为我只需交换 to_date()函数获取月份,然后按该值进行分组。

我现在想要获取的是按日期分组的过去 n 天(例如 3 天)活跃用户的不同数量。此外,我正在寻找一种适用于可变时间窗口而不仅仅是一天的解决方案(仅在第 x 天获取过去 3 天的活跃用户数量会很容易)。

结果应该是这样的:

date, 3d_active_user
2017-12-01, 111
2017-12-02, 234
2017-12-03, 254
2017-12-04, 100
2017-12-05, 103
2017-12-06, 103
2017-12-07, 230

在第一个选择中使用子查询(例如 select x, (select max(x) from x) as y from z )为移动时间窗口构建解决方法是不可能的,因为我正在使用的 Hive 版本不支持它。

我试试运气,比如 COUNT(DISTINCT IF(DATEDIFF(today,login_date)<=3,user_id,null))但到目前为止我尝试的一切都不起作用。

您知道如何解决这个问题吗? 任何帮助表示赞赏!

最佳答案

您可以使用“BETWEEN”功能。 如果您想查找活跃用户,请从特定日期至今登录。

选择 to_date(login_timestamp) 作为日期,COUNT(DISTINCT user_id) daily_active_user 来自登录 startDate_timeStamp 和 now() 之间的登录时间戳 按 to_date 分组(登录时间戳) 按日期升序排序

如果您想要活跃用户(即特定日期范围内的登录用户),则: 注意:-

选择 to_date(login_timestamp) 作为日期,COUNT(DISTINCT user_id) daily_active_user 来自登录 登录时间戳位于 to_date(startDate_timeStamp) 和 to_date(endDate_timeStamp) 之间 按 to_date 分组(登录时间戳) 按日期升序排序

关于mysql - 获取按日期分组的最近 n 天的活跃用户数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48639924/

相关文章:

hadoop - 基于月份的配置单元分区数据不起作用,显示错误:java.lang.RuntimeException:配置对象时出错

python - 无法创建 mysql 数据库 python ("can' t 连接到服务器 localhost")

php - echo 语句中的 echo 变量

php - 仅当 SQL 搜索给出结果时才读取数组

arrays - 如何在 Hive 的数组中搜索项目?

hadoop - 为所有节点在 hdfs 中复制数据是否更快?

hadoop - 在配置单元的非 native 表中更改表/添加列

sql - 我需要创建一个新列或将原始列从 array<string> 更改为 map<string,int> 其中 int 值位于相应字符串的新表中

php - Doctrine 合并 : DateTime field always updated

hadoop - 如何在 Hive 中透视数据