【发布时间】:2019-03-03 01:29:38
【问题描述】:
我正在尝试编写查询逻辑,这将允许我对用户活动进行分类:
• 问题是一个表,其中包含大约 5 分钟的时隙中的所有用户活动(并非所有都恰好是 5 分钟,有些是 3 分钟,其他是 4 分钟),并记录每个用户在特定状态下花费的时间量.
• 用户通常会在一天中的状态之间跳转。
问题:如果用户连续使用超过 3 小时(180 分钟)而不改变其状态,则必须将其报告为:“未分类”
我正在工作的表的当前视图:
user_id record_date user_status
user1 9/3/2017 14:25 status_1
user1 9/3/2017 14:30 status_3
user1 9/3/2017 14:35 status_3
user1 9/3/2017 14:40 status_2
user1 9/3/2017 14:45 status_2
user1 9/3/2017 14:50 status_2
user1 9/3/2017 14:55 status_2
user1 9/3/2017 15:00 status_2
user1 9/3/2017 15:05 status_2
user1 9/3/2017 15:10 status_2
user1 9/3/2017 15:15 status_2
user1 9/3/2017 15:20 status_2
user1 9/3/2017 15:25 status_2
user1 9/3/2017 15:30 status_2
user1 9/3/2017 15:30 status_2
user1 9/3/2017 15:35 status_2
user1 9/3/2017 15:40 status_2
user1 9/3/2017 15:43 status_3
user1 9/3/2017 15:45 status_3
user1 9/3/2017 15:50 status_2
user1 9/3/2017 15:50 status_2
user1 9/3/2017 15:55 status_2
user1 9/3/2017 16:00 status_2
user1 9/3/2017 16:00 status_2
user1 9/3/2017 16:04 status_2
我开始测试下面的逻辑,但是一旦我发现每个槽不完全是 5 分钟,我就无法继续。
SELECT user_id ,record_date
,CASE
WHEN SUM(status_1) OVER (
PARTITION BY user_id ORDER BY record_date ASC ROWS BETWEEN 35 PRECEDING
AND current row
) >= 180
THEN 1
ELSE 0
END AS unclassified_flag
--2
,CASE
WHEN SUM(status_2) OVER (
PARTITION BY user_id ORDER BY record_date ASC ROWS BETWEEN 35 PRECEDING
AND current row
) >= 180
THEN 1
ELSE 0
END AS unclassified_flag
FROM table
任何关于替代逻辑的想法都非常感谢
【问题讨论】:
-
刚刚更新了更正的标签。
-
Postgres 与 Redshift 非常不同。你真的两个都用吗?
-
没什么不同:Amazon Redshift 基于 PostgreSQL 8.0.2
-
它们非常不同:docs.aws.amazon.com/redshift/latest/dg/… "不要假设 Amazon Redshift 和 PostgreSQL 的共同元素的语义是相同的"
-
您审核的时间段是多长?一天?一周?永远?
标签: sql amazon-redshift