谷歌大查询行之间的时间差异
问题描述:
我目前正在尝试计算谷歌大查询行之间的时间戳差异附加是我用来测试代码的示例表。谷歌大查询行之间的时间差异
我使用此代码
SELECT
A.row,
A.issue.updated_at,
(B.issue.updated_at - A.issue.updated_at) AS timedifference
FROM [icxmedia-servers:icx_metrics.gh_zh_data_production] A
INNER JOIN [icxmedia-servers:icx_metrics.gh_zh_data_production] B
ON B.row = (A.row + 1)
WHERE issue.number==6 and issue.name=="archer"
ORDER BY A.requestid ASC
答
比JOIN
而是引用,这是更自然的使用解析函数来表示。 analytic functions with standard SQL in BigQuery的文档解释了分析函数的工作原理和语法。举个例子,如果你想采取如命令是由y
列决定在x
值连续的差异,你可以这样做:
WITH T AS (
SELECT
x,
y
FROM UNNEST([9, 3, 4, 7]) AS x WITH OFFSET y)
SELECT
x,
x - LAG(x) OVER (ORDER BY y) AS x_diff
FROM T;
注意,要BigQuery中运行这个,你需要取消选中“使用旧式SQL“框下的”显示选项“来启用标准SQL。 WITH T
条款仅仅为示例设置了一些数据。
针对您的特殊情况下,你可能会想要一个查询,如:
SELECT
row,
issue.updated_at,
issue.updated_at - LAG(issue.updated_at) OVER (ORDER BY issue.updated_at) AS timedifference
FROM `icxmedia-servers.icx_metrics.gh_zh_data_production`
WHERE issue.number = 6
AND issue.name = "archer"
ORDER BY requestid ASC;
如果你想确定updated_at
外面只是一个单一发行数量的差异,你可以使用一个PARTITION BY
条款也是如此。例如:
SELECT
row,
issue.name,
issue.number,
issue.updated_at,
issue.updated_at - LAG(issue.updated_at) OVER (
PARTITION BY issue.number
ORDER BY issue.updated_at) AS timedifference
FROM `icxmedia-servers.icx_metrics.gh_zh_data_production`
ORDER BY requestid ASC;
我尽力去做等于你的sugestion - AS为TimeDifference LAG(issue.updated_at)OVER(ORDER BY issue.updated_at) - - issue.updated_at在我的查询,但是我收到一个错误 - 缺少函数在分析表达中的应用。你有没有正确的可能性? –
请用你想要实现的例子创建一个单独的问题。 –
我试图获得行之间的差异,但值是整数,而不是时间戳。 LAG功能独自运作良好。但是如果我尝试做减法,你建议我收到警告 - 分析表达式中的缺失函数。是不同的列和值的同一个问题。 –