使用条件将行连接到上一行(Bigquery sql)

使用条件将行连接到上一行(Bigquery sql),sql,google-bigquery,Sql,Google Bigquery,我想将包含一系列子事件的表连接到第一个事件的id,以便以后可以聚合完整事件。在bigquery sql中找不到执行此操作的命令 或者,如果我可以为每个开始子事件创建一个对应于其各自结束的联合表,则会有所帮助,这样我就可以在会话开始和结束之间检查每一行,以确定它与哪个会话相关 如果有人知道如何做这两个选项之一,这将是一个很大的帮助。谢谢 该表如下所示: user id time part 111 1 01/03/2020 09:00 Start 111 2

我想将包含一系列子事件的表连接到第一个事件的id,以便以后可以聚合完整事件。在bigquery sql中找不到执行此操作的命令

或者,如果我可以为每个开始子事件创建一个对应于其各自结束的联合表,则会有所帮助,这样我就可以在会话开始和结束之间检查每一行,以确定它与哪个会话相关

如果有人知道如何做这两个选项之一,这将是一个很大的帮助。谢谢

该表如下所示:

user id         time        part
111  1  01/03/2020 09:00    Start
111  2  01/03/2020 09:01    Middle
111  3  01/03/2020 09:03    end
111  4  01/03/2020 19:00    start
111  5  01/03/2020 19:10    Middle
111  6  01/03/2020 19:11    Middle
111  7  01/03/2020 19:20    End
222  8  02/03/2020 07:32    Start
222  9  02/03/2020 07:35    End
222  10 03/03/2020 20:40    Start
222  11 03/03/2020 20:45    end
user id         time        part
111  1  01/03/2020 09:00    Start
111  1  01/03/2020 09:01    Middle
111  1  01/03/2020 09:03    end
111  4  01/03/2020 19:00    start
111  4  01/03/2020 19:10    Middle
111  4  01/03/2020 19:11    Middle
111  4  01/03/2020 19:20    End
222  8  02/03/2020 07:32    Start
222  8  02/03/2020 07:35    End
222  10 03/03/2020 20:40    Start
222  10 03/03/2020 20:45    end
我希望它看起来像这样:

user id         time        part
111  1  01/03/2020 09:00    Start
111  2  01/03/2020 09:01    Middle
111  3  01/03/2020 09:03    end
111  4  01/03/2020 19:00    start
111  5  01/03/2020 19:10    Middle
111  6  01/03/2020 19:11    Middle
111  7  01/03/2020 19:20    End
222  8  02/03/2020 07:32    Start
222  9  02/03/2020 07:35    End
222  10 03/03/2020 20:40    Start
222  11 03/03/2020 20:45    end
user id         time        part
111  1  01/03/2020 09:00    Start
111  1  01/03/2020 09:01    Middle
111  1  01/03/2020 09:03    end
111  4  01/03/2020 19:00    start
111  4  01/03/2020 19:10    Middle
111  4  01/03/2020 19:11    Middle
111  4  01/03/2020 19:20    End
222  8  02/03/2020 07:32    Start
222  8  02/03/2020 07:35    End
222  10 03/03/2020 20:40    Start
222  10 03/03/2020 20:45    end

下面是BigQuery标准SQL

#standardSQL
SELECT user,
  MIN(id) OVER(PARTITION BY user, grp) AS id, 
  time, part
FROM (
  SELECT *, 
    COUNTIF(LOWER(part) = 'start') OVER(PARTITION BY user ORDER BY time) grp
  FROM `project.dataset.table`
)
如果要应用于您问题中的样本数据-结果为

Row user    id  time                part     
1   111     1   01/03/2020 09:00    Start    
2   111     1   01/03/2020 09:01    Middle   
3   111     1   01/03/2020 09:03    end  
4   111     4   01/03/2020 19:00    start    
5   111     4   01/03/2020 19:10    Middle   
6   111     4   01/03/2020 19:11    Middle   
7   111     4   01/03/2020 19:20    End  
8   222     8   02/03/2020 07:32    Start    
9   222     8   02/03/2020 07:35    End  
10  222     10  03/03/2020 20:40    Start    
11  222     10  03/03/2020 20:45    end  

您应该添加您试图获得的预期结果和预期结果的示例数据。谢谢,添加了预期结果的示例您的比率较低。重要提示-您可以使用投递答案左侧投票下方的勾号
标记接受答案
。看看为什么它很重要!对答案进行投票也很重要。投票选出有帮助的答案。。。当有人回答你的问题时,你可以检查一下该做什么。遵循这些简单的规则,你可以提高自己的声望得分,同时让我们有动力来回答你的问题:O)请考虑!