我从Lunametrics博客获得了以下SQL查询。工作良好。但是,我希望能够做的是有一个额外的列显示会话级自定义变量的值。
我现在拥有的是:
SELECT
fullvisitorid,
visitId,
DATEDIFF(SEC_TO_TIMESTAMP(visitStartTime),
SEC_TO_TIMESTAMP(prevVisitStartTime)) AS daysSinceLastSession,
FLOOR((visitStartTime - prevVisitStartTime)/60) as minutesSinceLastSession
FROM (
SELECT
fullvisitorid,
visitId,
visitStartTime,
LAG(visitStartTime) OVER (PARTITION BY fullvisitorid ORDER BY visitStartTime
ASC) AS prevVisitStartTime
FROM
TABLE_DATE_RANGE([DATA],
TIMESTAMP ('2017-04-01'),
TIMESTAMP ('2017-04-08')))
我一直试图为索引为30的自定义维度引入一列,但没有成功。基本上,我只是希望能够看到自上次会话以来包含此自定义维度的访问者的日子。我的代码是:
max(case when hits.customdimensions.index = 30 then hits.customdimensions.value end) customerId
编辑:这显示我认为我可以将此自定义维度作为新列引入,但不起作用。
SELECT
fullvisitorid,
max(case when hits.customdimensions.index = 30 then
hits.customdimensions.value end) customerId,
visitId,
DATEDIFF(SEC_TO_TIMESTAMP(visitStartTime),
SEC_TO_TIMESTAMP(prevVisitStartTime)) AS daysSinceLastSession,
FLOOR((visitStartTime - prevVisitStartTime)/60) as minutesSinceLastSession
FROM (
SELECT
fullvisitorid,
max(case when hits.customdimensions.index = 30 then
hits.customdimensions.value end) customerId,
visitId,
visitStartTime,
LAG(visitStartTime) OVER (PARTITION BY fullvisitorid ORDER BY
visitStartTime ASC) AS prevVisitStartTime,
FROM
TABLE_DATE_RANGE([DATA],
TIMESTAMP ('2017-04-01'),
TIMESTAMP ('2017-04-08')))
感激地收到任何建议。
答案 0 :(得分:0)
MAX是一个聚合函数 - 您必须以某种方式对其进行分组,无论是在整个表格中GROUP BY
还是在行内,例如使用WITHIN RECORD
或WITHIN hits
要获得MAX( IF(hits.customdimensions.index = 30,hits.customdimensions.value,NULL) ) WITHIN RECORD
这一行首先为每个会话(RECORD
)和customDimension
生成一个值列表 - 如果index为30且为NULL,则为值:
MAX(NULL, NULL, NULL, ..., <value for hits.cd30>, ... , NULL, NULL, ... <another hits.cd30>, ... , NULL)
NULL
是最低可能值。字符串按字母顺序排序(实际上是按代码表排序,但它们包含按字母顺序排序的字符) - 因为您在会话级别聚合命中级别customDimensions,您的列表可能包含多个非空值,用于具有多个匹配的会话,因为可能有多个cd30。 MAX()
会返回字母表中最新的那个:"aab" < "aac" < "b"