Google bigquery 现在再进一步一点-表中有一个ID,我只是没有在上面包含它。谢谢,现在尝试一下。查询运行,但我只得到“avg dif 0.0”是的,如果我删除了avg,它看起来像是一直得到0或null。不能保证事件彼此相邻,它们可能被其他事件分隔开(会话开始是最常见的)。不

Google bigquery 现在再进一步一点-表中有一个ID,我只是没有在上面包含它。谢谢,现在尝试一下。查询运行,但我只得到“avg dif 0.0”是的,如果我删除了avg,它看起来像是一直得到0或null。不能保证事件彼此相邻,它们可能被其他事件分隔开(会话开始是最常见的)。不,google-bigquery,Google Bigquery,现在再进一步一点-表中有一个ID,我只是没有在上面包含它。谢谢,现在尝试一下。查询运行,但我只得到“avg dif 0.0”是的,如果我删除了avg,它看起来像是一直得到0或null。不能保证事件彼此相邻,它们可能被其他事件分隔开(会话开始是最常见的)。不过,这看起来是朝着正确方向迈出的一步,非常感谢。从原始照片中可能还不清楚,但这些事件都在一行中,每个用户会话一行。这可能并不理想-这些分析有点混乱,可能需要重新编写。@NathanielD.Waggoner-hmm这很奇怪。请确认这些事件是否保


现在再进一步一点-表中有一个ID,我只是没有在上面包含它。谢谢,现在尝试一下。查询运行,但我只得到“avg dif 0.0”是的,如果我删除了avg,它看起来像是一直得到0或null。不能保证事件彼此相邻,它们可能被其他事件分隔开(会话开始是最常见的)。不过,这看起来是朝着正确方向迈出的一步,非常感谢。从原始照片中可能还不清楚,但这些事件都在一行中,每个用户会话一行。这可能并不理想-这些分析有点混乱,可能需要重新编写。@NathanielD.Waggoner-hmm这很奇怪。请确认这些事件是否保存在相同的
时间戳\u micros
?另外,如果在
timestamp_diff
函数中将日期精度更改为“秒”或“分钟”,会发生什么情况?谢谢,现在尝试一下。查询运行,但我只得到“avg dif 0.0”是的,如果我删除avg,它看起来像是所有时间差都得到0或null。不能保证事件彼此相邻,它们可能被其他事件分隔开(会话开始是最常见的)。不过,这看起来是朝着正确方向迈出的一步,非常感谢。从原始照片中可能还不清楚,但这些事件都在一行中,每个用户会话一行。这可能并不理想-这些分析有点混乱,可能需要重新编写。@NathanielD.Waggoner-hmm这很奇怪。请确认这些事件是否保存在相同的
时间戳\u micros
?另外,如果在
timestamp_diff
函数中将日期精度更改为“秒”或“分钟”,会发生什么情况?
#standardSQL
SELECT AVG(
(SELECT
  event.timestamp_micros
FROM
  `table`,
  UNNEST(event_dim) AS event
where event.name = "LOGIN_CALL_OK") - 
(SELECT
  event.timestamp_micros
FROM
  `table`,
  UNNEST(event_dim) AS event
where event.name = "LOGIN_CALL"))
from `table`
WITH data AS(
  SELECT STRUCT('1' as user_id) user_dim, ARRAY< STRUCT<date string, name string, timestamp_micros INT64> >  [('20170610', 'EVENT1', 1497088800000000), ('20170610', 'LOGIN_CALL', 1498088800000000), ('20170610', 'LOGIN_CALL_OK', 1498888800000000), ('20170610', 'EVENT2', 159788800000000), ('20170610', 'LOGIN_CALL', 1599088800000000), ('20170610', 'LOGIN_CALL_OK', 1608888800000000)] event_dim union all
  SELECT STRUCT('2' as user_id) user_dim, ARRAY< STRUCT<date string, name string, timestamp_micros INT64> >  [('20170610', 'EVENT1', 1497688500400000), ('20170610', 'LOGIN_CALL', 1497788800000000)] event_dim UNION ALL
  SELECT STRUCT('3' as user_id) user_dim, ARRAY< STRUCT<date string, name string, timestamp_micros INT64> >  [('20170610', 'EVENT1', 1487688500400000), ('20170610', 'LOGIN_CALL', 1487788845000000), ('20170610', 'LOGIN_CALL_OK', 1498888807700000)] event_dim
)

SELECT
  AVG(time_diff) avg_time_diff
FROM(
SELECT
  CASE WHEN e.name = 'LOGIN_CALL' AND LEAD(NAME,1) OVER(PARTITION BY user_dim.user_id ORDER BY timestamp_micros ASC) = 'LOGIN_CALL_OK' THEN TIMESTAMP_DIFF(TIMESTAMP_MICROS(LEAD(TIMESTAMP_MICROS, 1) OVER(PARTITION BY user_dim.user_id ORDER BY timestamp_micros ASC)), TIMESTAMP_MICROS(TIMESTAMP_MICROS), day) END time_diff
FROM data,
UNNEST(event_dim) e
WHERE e.name in ('LOGIN_CALL', 'LOGIN_CALL_OK')
)