我有一些看起来类似的数据:
我想添加一个列,其中包含每个事件发生的会话的开始时间,以便输出看起来像这样:
session_start_time
列基于session_start
事件。
我已尝试在分析函数中使用分区但是为了这样做,我需要在每行中使用相同的值,如果我有,我会解决我的问题。
我还尝试使用窗口函数FIRST_VALUE
,但我还没有设法只提取event_name
为“session_start”的事件,因为我看不到内部过滤的方法窗函数。
如何在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
答案 0 :(得分:1)
#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