可以使用 LAG 函数和 CASE 表达式来解决这个问题。下面是一个示例代码,说明如何延迟并获取在条件下的第一个值:
SELECT
user_id,
event_timestamp,
event_type,
LAG(event_type) OVER (PARTITION BY user_id ORDER BY event_timestamp ASC) as previous_event
FROM
`mydataset.mytable`
WHERE
event_type IN ('login', 'logout')
ORDER BY
user_id,
event_timestamp ASC
在这个例子中,LAG 函数将前一个事件类型返回为 previous_event。CASE 表达式用于设置选择条件(event_type IN ('login', 'logout')),以便仅对感兴趣的事件进行筛选。最后,ORDER BY 子句用于确保结果按用户 ID 和事件时间戳的顺序排序。