【发布时间】:2019-05-07 20:07:05
【问题描述】:
我有一个查询,其中有一个包含大约 20k 用户的列表,这些用户在一个月的某个特定周内表示他们已登录到我们的网站。
我需要获得的信息 - 对于这些用户中的每一个,在过去 30 天内,如果他们有 1. 登录:由记录在同一张表中的任何行定义 2. 30 天窗口中的最大事件,在当前 where 子句中的日期之前
这是当前的代码 sn-p,它可以帮助我在给定的一周内将范围缩小到大约 20k 用户:
select
user_id,
max(timestamp)
from table
where timestamp between '2019-02-01' and '2019-02-05'
group by 1,2;
预期结果集/列:
- user_id,
- 最大值(时间戳),
- logged_on,[如果他们在最大(时间戳)日期之前的 30 天内在同一个表中有任何行数]
- previous_timestamp,[最大(时间戳)日期前 30 天内的第二个最近登录日期]
【问题讨论】:
-
拥有表的架构和一些示例行(包括可以说明答案应该是什么的几行)会有所帮助。我认为,一个困难是显示尚未登录的用户,因为他们没有日期窗口的记录。
-
是否有一个“最大”日期,或者每个用户有一个最大日期?
-
@BobMcCormick - 谢谢。此表中的其他列都与 URL/流量相关。当用户登录时,user_id 列会填充一个值。如果用户未登录,则该列将为 NULL。我打算过滤掉 NULL 行以仅查看已登录的用户。每个用户没有单一的“最大”日期。我正在将 max 函数应用于由我不会分析和开始的用户周所限制的时间戳。
-
我认为您需要提供表格中几行的具体示例,其中仅包含感兴趣的列。另外,到目前为止,您尝试过什么查询?
-
这里是表格的列,括号内有 2 个样本值:1. user_id (A1B2C3; NULL) 2. timestamp (2019-02-01 10:56:35.044; 2019-02- 02 09:50:34.045) 3. url (www.page1.com; www.page2.com) 4. source (facebook; twitter) 使用这个数据集,我目前只过滤一周的数据以获得用户 ID 列表。对于这个用户子集,一周前 30 天的数据(如上所述),希望获得:1. 行数 2. 如果任何这些行的源列包含“facebook”
标签: sql snowflake-cloud-data-platform