我目前正在尝试在BigQuery表中创建一个列,该列只包含hits.page.pagePath的滞后值。对于此示例,假设我的hits.time值为0,513,518,762,991。这些值对应于我创建的unique_visit_id。每天有成千上万的独特访问,每个访问都有不同的点击次数,时间值和行号。
为了帮助进行各种计算,我想在数据框中添加一个列,该列只包含hits.page.pagePath列中所有行的滞后值(当hits.time&gt时没有关联的滞后) ; 0)。请注意,hits.time是一个重复的组,它引用了使用CONCAT(fullVisitorId, STRING(visitId)) AS unique_visit_id
计算的唯一访问ID。因此,我怀疑会涉及像OVER这样的命令。我的初始查询使用了以下方法:
SELECT date, LAG(hits.page.pagePath,1), CONCAT(fullVisitorId, STRING(visitId)) AS unique_visit_id, visitId, visitNumber, fullVisitorId, totals.pageviews, totals.bounces,
hits.page.pagePath, device.deviceCategory, device.browser, device.browserVersion, hits.customVariables.index,
hits.customVariables.customVarName, hits.customVariables.customVarValue, hits.time
FROM (FLATTEN([XXXXXXXX.ga_sessions_20140711], hits.time))
WHERE hits.customVariables.index = 4
ORDER BY unique_visit_id DESC, hits.time ASC
LIMIT 1000;
因此遗憾地返回了错误:
错误:LAG是一个分析函数,必须附带OVER子句。
职位编号:XXXXXXXX-XXX:job_zduhuRKgvrgmA7niBzcyb3empwY
我猜测OVER会引用CONCAT(fullVisitorId, STRING(visitId)) AS unique_visit_id
,因为包含相同unique_visit_id的每一行代表唯一访问中的匹配。不幸的是,在这里使用OVER也返回了一个错误。
答案 0 :(得分:6)
分析函数有一个奇怪的语法...你几乎就在那里,但你只需要将ORDER BY
子句移动到OVER
使用的LAG()
语句中:
SELECT date, LAG(hits.page.pagePath,1)
OVER(PARTITION BY unique_visit_id ORDER BY hits.time ASC) as lagged,
CONCAT(fullVisitorId, STRING(visitId)) AS unique_visit_id, visitId,
...
FROM (FLATTEN([XXXXXXXX.ga_sessions_20140711], hits.time))
WHERE hits.customVariables.index = 4
LIMIT 1000;