【问题标题】:Select the date of a UserIDs first/most recent purchase选择用户 ID 首次/最近购买的日期
【发布时间】:2018-06-18 16:00:09
【问题描述】:

我正在使用 BigQuery 中的 Google Analytics(分析)数据,希望将上次访问和首次访问的日期汇总到 UserID 级别,但是我的代码目前正在返回该用户的最大访问日期,只要他们在选定的日期范围,因为我使用的是MAX()

如果我删除MAX(),我必须通过DATE 删除GROUP,这是我不想要的,因为这样会为每个用户ID 返回多行。

这是我的代码,它返回每个用户的一系列日期 - last_visit_date 当前正在工作,因为它是唯一可以简单查看用户活动的最后日期的日期。关于如何让last_ord_date 选择订单实际发生的日期的任何建议?

SELECT
  customDimension.value AS UserID,
  # Last order date
  IF(COUNT(DISTINCT hits.transaction.transactionId) > 0,
    (MAX(DATE)),
    "unknown") AS last_ord_date,

  # first visit date
  IF(SUM(totals.newvisits) IS NOT NULL,
    (MAX(DATE)),
    "unknown") AS first_visit_date,

  # last visit date
  MAX(DATE) AS last_visit_date,

  # first order date
  IF(COUNT(DISTINCT hits.transaction.transactionId) > 0,
    (MIN(DATE)),
    "unknown") AS first_ord_date

FROM
  `XXX.XXX.ga_sessions_20*` AS t
CROSS JOIN
  UNNEST (hits) AS hits
CROSS JOIN
  UNNEST(t.customdimensions) AS customDimension
CROSS JOIN
  UNNEST(hits.product) AS hits_product
WHERE
  parse_DATE('%y%m%d',
    _table_suffix) BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 30 day)
  AND DATE_SUB(CURRENT_DATE(), INTERVAL 1 day)
  AND customDimension.index = 2
  AND customDimension.value NOT LIKE "true"
  AND customDimension.value NOT LIKE "false"
  AND customDimension.value NOT LIKE "undefined"
  AND customDimension.value IS NOT NULL
GROUP BY
  UserID

【问题讨论】:

  • 数组可能是一种糟糕的存储方式。示例数据和期望的结果将帮助其他人了解您想要做什么。
  • 通常在公共论坛上公开真实的项目ID并不是一件好事-您可能可以放置占位符

标签: sql google-bigquery


【解决方案1】:

最有效和最清晰的方法(也是最便携的)是有一个简单的表/视图,它有两列:userid,last_purchase,另一个有另外两个 cols userid,first_visit。

然后你将它与用户 ID 上的原始原始表内部连接并点击时间戳以获取你感兴趣的会话 ID。3 个步骤但简单、易读且易于维护

对于依赖于第一次或最后一次购买/操作(只需查看您那里的未嵌套操作)的查询很容易遇到太多复杂性变得无法使用的问题,并且您将花费太多时间来试图弄清楚输出的意思。

另外请记住,在查询中使用通配符有 1000 个表的限制,因此您的最后一次和第一次访问是在 1000 天的滚动窗口内。

【讨论】:

  • 谢谢,这很有道理,我的第二种方法是创建包含数据的子表,但您提出了一个很好的观点,即在寻找“完美”单曲时可能会浪费精力查询!
  • 太棒了!让我知道它是否有效!我曾经做过很多这样的客户流失分析,这是一场噩梦。当您想添加新功能时,您需要重新编写所有内容。使查询模块化使我当时的生活变得更加简单 =)
猜你喜欢
  • 1970-01-01
  • 2021-08-28
  • 2023-03-13
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 2022-10-12
  • 1970-01-01
  • 2013-06-06
相关资源
最近更新 更多