代码之家  ›  专栏  ›  技术社区  ›  Ben P

选择用户ID首次/最近购买的日期

  •  0
  • Ben P  · 技术社区  · 7 年前

    我正在bigquery中使用google分析数据,希望将上次访问和首次访问的日期聚合到用户id级别,但是我的代码当前正在返回该用户的最大访问日期,只要他们在选定的日期范围内购买,因为我正在使用 MAX() .

    如果我删除 最大() 我必须 GROUP 通过 DATE ,但我不希望这样,因为这将为每个用户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
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   FKrauss    7 年前

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

    然后,将其与userid上的原始表进行内部连接,并点击timestamp以获取您感兴趣的会话id。3个步骤,但简单易读,易于维护

    对于依赖于第一次或最后一次购买/操作的查询(只需查看您在那里拥有的最不必要的操作),很容易遇到太多的复杂性,这样的查询将变得不可用,并且您将花费太多的时间试图找出输出的含义。

    还要记住,在查询中使用通配符有1000个表的限制,因此您的最后一次和第一次访问都处于1000天的滚动窗口中。