如何将当前会话时间添加到 BigQuery 中的每个事件?

How to add current session time to each event in BigQuery?

我有一些看起来与此类似的数据:

我想添加一个包含每个事件发生的会话的开始时间的列,以便输出看起来像这样:

session_start_time 列基于 session_start 事件。

我试过在分析函数中使用分区,但要这样做,我需要每行中的值都相同才能开始,如果有,我就会解决我的问题。

我也试过 FIRST_VALUE 和 window 函数,但我没能只提取 event_name 是 "session_start" 的事件,因为我可以看不到在 window 函数内部进行过滤的方法。

如何在 BigQuery 上使用标准 SQL 实现此目的?

下面是包含示例数据的示例查询:

WITH user_events AS (
  SELECT
    1 AS user_id,
    'session_start' AS event_name,
    0 AS event_time
  UNION ALL SELECT 1, 'video_play', 2
  UNION ALL SELECT 1, 'ecommerce_purchase', 3
  UNION ALL SELECT 1, 'session_start', 100
  UNION ALL SELECT 1, 'video_play', 105
)

SELECT
  user_id,
  event_name,
  event_time
FROM
  user_events
ORDER BY
  event_time
#standardSQL
WITH user_events AS (
  SELECT 1 AS user_id, 'session_start' AS event_name, 0 AS event_time UNION ALL 
  SELECT 1, 'video_play', 2 UNION ALL 
  SELECT 1, 'ecommerce_purchase', 3 UNION ALL 
  SELECT 1, 'session_start', 100 UNION ALL 
  SELECT 1, 'video_play', 105
)
SELECT 
  user_id,
  event_name,
  event_time,
  MIN(event_time) OVER(PARTITION BY user_id, session) AS session_start_time
FROM (
  SELECT
    user_id,
    event_name,
    event_time,
    COUNTIF(event_name='session_start') OVER(PARTITION BY user_id ORDER BY event_time) AS session
  FROM user_events
)
ORDER BY event_time