【发布时间】:2020-07-21 12:44:57
【问题描述】:
我有一个数据集,其中包含每 15 分钟连接到服务器的用户列表,例如
May 7, 2020, 8:09 AM user1
May 7, 2020, 8:09 AM user2
...
May 7, 2020, 8:24 AM user1
May 7, 2020, 8:24 AM user3
...
我希望每天都有一些活跃用户,例如
May 7, 2020 71
May 8, 2020 83
现在,棘手的部分。 如果他/她在过去 7 天内有 80% 或更多的时间保持连接,则定义为活跃用户。这意味着,如果有 672 个 15 分钟每周间隔 (1440 / 15 x 7),则必须显示用户 538 (672 x 0.8) 次。
到目前为止我的代码是:
SELECT
DATE_TRUNC('week', ts) AS ts_week
,COUNT(DISTINCT user)
FROM activeusers
GROUP BY 1
仅提供每周连接的唯一用户列表。
July 13, 2020, 12:00 AM 435
July 20, 2020, 12:00 AM 267
但我想实现活动用户定义,并获得每天的结果,而不仅仅是星期一。
【问题讨论】:
-
请解释“过去 7 天内 80% 的时间”的真正含义。目前尚不清楚您想要什么。另外,用您正在使用的数据库标记您的问题。
-
@GordonLinoff 用扩展定义更新了帖子
-
HAVING COUNT(*) > 538 似乎是这里的方法 - 可能与本周的窗口函数一起使用。
-
@Randy 不幸的是,在我的代码上下文中,HAVING COUNT(*) 并没有多大作用
标签: sql postgresql time-series cumulative-sum metabase