BigQuery SQL中的LAG()函数错误; 无法返回滞后的hits.page.pagePath

Nat*_*yne 4 google-bigquery

我目前正在尝试在BigQuery表中创建一个列,该列只包含hits.page.pagePath的滞后值.对于此示例,假设我的hits.time值为0,513,518,762,991.这些值对应于我创建的unique_visit_id.每天有成千上万的独特访问,每个访问都有不同的点击次数,时间值和行号.

为了帮助进行各种计算,我想在数据框中添加一个列,该列只包含hits.page.pagePath列中所有行的滞后值(当hits.time> 0时没有关联的滞后).请注意,hits.time是一个重复的组,它引用了使用的唯一访问ID CONCAT(fullVisitorId, STRING(visitId)) AS unique_visit_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;
Run Code Online (Sandbox Code Playgroud)

因此遗憾地返回了错误:

错误:LAG是一个分析函数,必须附带一个OVER子句.

工作ID:XXXXXXXX-XXX:job_zduhuRKgvrgmA7niBzcyb3empwY

我已经猜到OVER会引用,CONCAT(fullVisitorId, STRING(visitId)) AS unique_visit_id因为包含相同unique_visit_id的每一行代表一次唯一访问中的命中.不幸的是,在这里使用OVER也返回了一个错误.

Jor*_*ani 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;
Run Code Online (Sandbox Code Playgroud)