SQL/Redshift : Querying user behaviour before first purchase

标签 sql amazon-redshift

我有下表:

Table:  users
id | created_ts | username_str
---------------------------------

Table:  activity
user_id | created_ts | activity_descr_str
---------------------------------

Table:  purchase_orders
id | user_id | created_ts | price

users.id 是外键 user_id 的主键。 我想知道有多少用户在首次购买之前进行过 <= 3 次事件。但仅适用于日期 X(例如“2016-08-01”)之后新加入的用户。

非常感谢。

编辑,2016-10-06:

这是我尝试过的:

SELECT COUNT(DISTINCT user_id)
FROM (SELECT po.user_id
             FROM purchase_orders po
        LEFT JOIN activity a USING (user_id)
        JOIN users u ON u.id = po.user_id
    WHERE   DATE (po.created_ts) >= '2016-08-01'
      AND   a.created_ts < po.created_ts
      GROUP BY 1
      HAVING COUNT(a.created_ts) <= 3)

最佳答案

您只需将逻辑分成几个部分:

  • 获取每个用户的首次订购日期。
  • 过滤掉年龄过大的用户。
  • 参加事件,注意日期。
  • 计算每个用户的事件数量。
  • 过滤并再次计数。

因此,一种方法是这样的查询:

select count(*)
from (select user_id, count(a.user_id) as num_activities
      from (select po.user_id, min(created_ts) as mints
            from purchase_orders po
            group by po.user_id
            having min(created_ts) >= '2016-08-01'
           ) o left join
           activity a
           on a.user_id = o.user_id and a.created_ts < o.created_ts
      group by user_id
     ) u
where num_activities <= 3;

关于SQL/Redshift : Querying user behaviour before first purchase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39876520/

相关文章:

java - 用于本地测试的 Redshift

sql - Integer 和 JSONB 之间的 PostgreSQL UNION 得到错误 : UNION types integer and jsonb cannot be matched

sql - 删除表忽略 PostgreSQL 中的依赖项?

jdbc - AWS Data Pipeline Redshift 复制事件 没有合适的驱动程序

mysql - 返回多个用户的唯一记录

sql - PostgreSQL - 检查反值行是否存在的最佳方法

amazon-redshift - 使用复制命令和 list 文件将 parquet 格式文件加载到 Amazon Redshift 时出错

php - Mysql alter table 添加重复名称错误

sql - 错误 - 指定的数据类型无效。 [数据类型(如果已知)= varchar]

sql - '' 附近的语法不正确