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