使用条件将行连接到上一行(Bigquery sql)
我想将包含一系列子事件的表连接到第一个事件的id,以便以后可以聚合完整事件。在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
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)请考虑!