Sql n:“我想在会话中,为所有之前的操作注册第一次发生的事务id”。非常感谢您的回答!如果会话_id=1中没有事务,但第一个“视图”(或另一个操作)在第一个会话_id中,则代码将如何更改。与他相反,显示事务_id=2@Zzema-我不认为代码需要更改-它仍然会
Sql n:“我想在会话中,为所有之前的操作注册第一次发生的事务id”。非常感谢您的回答!如果会话_id=1中没有事务,但第一个“视图”(或另一个操作)在第一个会话_id中,则代码将如何更改。与他相反,显示事务_id=2@Zzema-我不认为代码需要更改-它仍然会,sql,google-bigquery,bigquery-standard-sql,Sql,Google Bigquery,Bigquery Standard Sql,n:“我想在会话中,为所有之前的操作注册第一次发生的事务id”。非常感谢您的回答!如果会话_id=1中没有事务,但第一个“视图”(或另一个操作)在第一个会话_id中,则代码将如何更改。与他相反,显示事务_id=2@Zzema-我不认为代码需要更改-它仍然会产生您期望的结果(基于您的问题)-您是否确实尝试过它?是的,我尝试过,谢谢)我的评论与问题中未写的变更条件有关。。。然而,在阅读了有关窗口功能的内容后,我发现了如何重新制作您的答案,再次感谢您的回答!如果会话_id=1中没有事务,但第一个“视图
n:“我想在会话中,为所有之前的操作注册第一次发生的事务id”。非常感谢您的回答!如果会话_id=1中没有事务,但第一个“视图”(或另一个操作)在第一个会话_id中,则代码将如何更改。与他相反,显示事务_id=2@Zzema-我不认为代码需要更改-它仍然会产生您期望的结果(基于您的问题)-您是否确实尝试过它?是的,我尝试过,谢谢)我的评论与问题中未写的变更条件有关。。。然而,在阅读了有关窗口功能的内容后,我发现了如何重新制作您的答案,再次感谢您的回答!如果会话_id=1中没有事务,但第一个“视图”(或另一个操作)在第一个会话_id中,则代码将如何更改。与他相反,显示事务_id=2@Zzema-我不认为代码需要更改-它仍然会产生您期望的结果(基于您的问题)-您是否确实尝试过它?是的,我尝试过,谢谢)我的评论与问题中未写的变更条件有关。。。然而,在阅读了有关窗口功能的内容后,我想出了如何重新生成您的答案,再次感谢
client_id session_id time action transaction_id
------------------------------------------------------
1 1 15:01 view NULL
1 1 15:02 basket NULL
1 1 15:03 basket NULL
1 1 15:04 purchase 1
1 2 15:05 basket NULL
1 2 15:06 purchase 2
1 2 15:07 view NULL
session_id time transaction_id
------------------------------------
1 15:01 1
1 15:02 1
1 15:03 NULL
1 15:04 1
2 15:05 2
2 15:06 2
2 15:07 NULL
select t.*,
(case when row_number() over (partition by client_id, session_id, action
order by time) = 1
then max(transactc
ion_id) over (partition by client_id, session_id)
end) as new_transaction_id
from t