选择UserIDs第一次/最近一次购买的日期

时间:2018-06-15 15:04:14

标签: sql google-bigquery

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

如果我移除MAX(),我必须GROUP DATE,我不想这样做,然后每个UserID返回多行。

以下是我的代码,它返回每个用户的一系列日期 - 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

1 个答案:

答案 0 :(得分:1)

执行此操作(也是最便携)的最有效和最明确的方法是拥有一个包含两列的简单表/视图:userid,last_purchase和另一个具有其他两个cols userid,first_visit。

然后你内部加入userid上的原始原始表并点击时间戳来获取你感兴趣的会话ID .3个步骤但简单,易读且易于维护

对于依赖于第一次或最后一次购买/操作的查询(仅查看您在那里进行的不必要的操作)而变得无法使用并且您将花费的方式,很容易达到太高的复杂性太多时间试图弄清楚输出的意义。

另请注意,在查询中使用通配符的限制为1000个表,因此您的上次访问和首次访问都在1000天的滚动窗口中。

相关问题