Sql 过去30天内每天活跃的活跃客户

Sql 过去30天内每天活跃的活跃客户,sql,google-bigquery,Sql,Google Bigquery,我有一个BQ表,用户事件如下所示: event_date | user_id | event_type 数据针对数百万用户,针对不同的事件日期 我想写一个查询,它将为我提供过去30天内每天活跃的用户列表 这给了我当天的唯一用户总数;我不能让它给我每次约会的最后30个。谢谢你的帮助 SELECT user_id, event_date FROM [TableA] WHERE 1=1 AND user_id IS NOT NULL AND event_date >=

我有一个BQ表,用户事件如下所示:

event_date | user_id | event_type
数据针对数百万用户,针对不同的事件日期

我想写一个查询,它将为我提供过去30天内每天活跃的用户列表

这给了我当天的唯一用户总数;我不能让它给我每次约会的最后30个。谢谢你的帮助

SELECT
  user_id,
  event_date
FROM
  [TableA]
WHERE
  1=1
  AND user_id IS NOT NULL
  AND event_date >= DATE_ADD(CURRENT_TIMESTAMP(), -30, 'DAY')
GROUP BY
  1,
  2
ORDER BY
  2 DESC

以下是BigQuery标准SQL,对您的案例没有什么假设:

每个用户每个日期只有一行 如果用户在过去30天内至少有5个“确定可以是任何数字”,甚至在这30天内只有1个条目/行,则认为该用户在过去30天内处于活动状态 如果上述内容有意义,请参见下文

标准SQL 选择 用户id、事件日期 从…起 选择 用户id、事件日期、, 计数1 按用户\ u id超额分配 按UNIX\u日期事件\u日期排序 范围在前30个到前1个之间 >=5作为活动 从你的桌子上` 何处活动 按用户id、事件日期分组 -按事件和日期排序 如果上述假设1不正确-您可以简单地添加预分组作为子选择

标准SQL 选择 用户id、事件日期 从…起 选择 用户id、事件日期、, 计数1 按用户\ u id超额分配 按UNIX\u日期事件\u日期排序 范围在前30个到前1个之间 >=5作为活动 从…起 选择用户id、事件日期 从“你的桌子” 按用户id、事件日期分组 何处活动 按用户id、事件日期分组 -按事件和日期排序 更新

注释:如果用户在“查看”、“转换”、“产品详细信息”、“搜索”中有任何事件类型,则它们将被视为活动。这意味着应用程序中触发的任何类型的事件

所以,我想你可以从下面开始

标准SQL 选择 用户id、事件日期 从…起 选择 用户id、事件日期、, 计数1 按用户\ u id超额分配 按UNIX\u日期事件\u日期排序 范围在前30个到前1个之间 >=5作为活动 从…起 选择用户id、事件日期 从“你的桌子” 在“视图”、“转换”、“产品详细信息”、“搜索”中键入事件 按用户id、事件日期分组 何处活动 按用户id、事件日期分组 -按事件和日期排序
您对过去30天内哪些人处于活动状态的定义是什么?您能否提供样本数据和期望的结果,以便我们了解您的意图?@MikhailBerlyant-如果用户在“查看”、“转换”、“产品详细信息”和“搜索”中有任何事件类型,它们将被视为处于活动状态。这意味着应用程序中触发的任何类型的事件。请参阅我的答案-您可以轻松地将其添加到我在那里建议的解决方案中。你能这样做吗?还是你还需要帮助?让我知道更新的答案谢谢,@mikhailberlyan让我试试更新的答案。我会测试查询,看看它是否给出了期望的结果。当我提到什么是我的活跃用户标准时,我还希望用户在30天内每天至少有1行。我需要测试此逻辑如果用户在过去30天内至少有5个肯定可以是任意数字-即使在这30天内只有1个条目/行-那么您应该使用30而不是5:-注意:这是BigQuery标准SQL,因此您需要将表引用为`project.dataset.yourtable`我不确定原因,但当我从最外层的查询和group by子句中获取event_date以仅获取用户id列表时,我的结果集缩小到一半。这很有意义,因为现在每个用户可以将同一用户的不同日期压缩到一个输出行中。如果您在浏览项目时还有其他问题,我真的建议您发布新问题sI确实提出了新问题。给你