我正在尝试将LAG功能与PARTITION BY结合使用来计算时间戳的差异。
SELECT
uuid,
event_info,
TIMESTAMP_TO_MSEC(event_time) - LAG(TIMESTAMP_TO_MSEC(event_time),1) OVER (PARTITION BY userId ORDER BY event_time ASC)
FROM
[DataSet.TableName]
ORDER BY
uuid,
event_time
但是这会产生一个错误,来自bigquery说“错误:解析表达式中缺少函数:4.95 - 4.153”
但是,如果我将第4行分成两部分
TIMESTAMP_TO_MSEC(event_time) as time,
LAG(TIMESTAMP_TO_MSEC(event_time),1) OVER (PARTITION BY userId ORDER BY event_time ASC) as previousTime,
然后它运行得很好。解决方法是使用上面的“修复”,然后将整个查询包装在另一个查询中,以便我可以执行计算
previousTime - time as difference
但这似乎有点hacky,其他SQL变种没有查询问题。
有人有任何建议吗?
谢谢, 布拉德
答案 0 :(得分:3)
这应该在BigQuery的标准SQL方言中修复 - https://cloud.google.com/bigquery/sql-reference/enabling-standard-sql
请注意,遗留SQL中的TIMESTAMP_TO_MSEC
函数不是UNIX_MILLIS
,而是需要使用等效的cordova prepare
函数。