BigQuery:在WHERE子句中使用基于当前行

时间:2017-12-20 11:45:03

标签: sql google-analytics google-bigquery

我知道标题可能很愚蠢,但我很难用不同的方式来表达它。

我必须在工作环境中使用BigQuery来获取某些报告。 BigQuery已连接到我们的Google Analytics视图。这给了我们一个每天有1个表的数据集。表的行是我们站点上的用户会话,而列包含有关会话的一些信息。

我遇到的问题如下: 我想选择包含交易的会话,但前提是在交易发生前的最后x天内,某个推荐人将用户引荐到我们的网站。我只熟悉基本的SQL而不是任何高级概念。这对我来说真的很令人沮丧,因为对于任何适当的编程语言而言,如果给出一个.csv的数据,这将是一个明智的选择,但我对SQL中的相关概念缺乏了解。

#standardSQL
SELECT
  COUNT(*)
FROM
  `dataset.ga_sessions_2017*`
WHERE 
  totals.transactions > 0 AND
  fullVisitorId IN (SELECT
                        fullVisitorId 
                    FROM 
                        `dataset.ga_sessions_2017*` 
                    WHERE 
                         trafficSource.source = "xyz.com"
                    ) AND
  < date difference thing>

我可以像使用trafficSource(referrer)一样过滤日期差异。对我来说问题是虽然“xyz.com”是一个静态的东西,但我需要引用我所在的当前行的日期值。所以我过滤第二个SELECT的日期将是动态的从一行到另一行。任何人都可以指导我如何做到这一点?这似乎是经常出现的事情。

1 个答案:

答案 0 :(得分:0)

我并不熟悉GA表,但之前在BigQuery中编写了一些wildcard queries,我认为您可以使用_TABLE_SUFFIX伪完成您正在寻找的内容柱:

CAST(_TABLE_SUFFIX AS INT64) >= 1217

1217今天的MMDD格式的日期减去3天,假设表名为_20171217,_20171218等。否则,您只需使用REPLACE删除下划线,然后再转换为一个int。如果您需要自动运行此查询,还有一些函数可以为您生成今天的日期。

此外,我认为fullVisitorId业务可以用简单的WHERE trafficSource.source = "xyz.com"替换,但如果不能自己运行查询,则很难确定。

所以完整的查询看起来像这样:

#standardSQL
SELECT
  COUNT(*)
FROM
  `dataset.ga_sessions_2017*`
WHERE 
  totals.transactions > 0 AND
  trafficSource.source = "xyz.com" AND
  CAST(_TABLE_SUFFIX AS INT64) >= 1217