我知道标题可能很愚蠢,但我很难用不同的方式来表达它。
我必须在工作环境中使用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的日期将是动态的从一行到另一行。任何人都可以指导我如何做到这一点?这似乎是经常出现的事情。
答案 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