【发布时间】:2018-03-16 13:17:09
【问题描述】:
考虑以下虚拟数据集
ID EVENT VALUE SORT_KEY
1 submitted 10 1
1 action 20 2
1 closed 30 3
1 action 30 4
2 submitted 10 1
2 action 10 2
2 action 10 3
2 closed 10 4
2 action 10 5
3 action 29 1
3 submitted 20 2
3 action 10 3
3 closed 10 4
3 action 10 5
4 action 10 1
我想总结提交(包括)和关闭之间每个 id 的所有操作。我不关心这些边界之外的事件。 我想知道是否可以通过 id 构建一个窗口函数分区并遵循直到匹配表达式。
想要的结果:
ID EVENT VALUE_SUM
1 submitted 60
2 submitted 40
3 submitted 40
计算此值的查询如下所示:
SELECT
id
, event
, SUM(value) OVER (PARTITION BY id ROWS BETWEEN CURRENT ROW PRECEDING AND event='closed' FOLLOWING) as value_sum
FROM my_table
WHERE event = 'submitted'
我知道可以通过自身的多个连接来执行此操作,但由于数据的大小和优化原因,我想知道是否可以使用窗口函数来执行此操作。谢谢。
【问题讨论】:
-
期望的结果将帮助我们了解您想要什么。你的 sql 有点帮助,但不足以真正知道你在追求什么。请更好地解释逻辑并分享您对此示例数据的期望结果。
标签: sql google-bigquery window-functions