sql - 根据事件序列有条件地隔离/求和数据
问题描述
我有一个表格,可以按顺序跟踪事件并计算每个事件的时间。我想要使用下面的示例数据做的是计算在第二个事件 C 发生之前发生的所有事件 A 的总时间(秒) 。所以在下面的例子中,我想要一个 550 秒的输出。
明显地,
select sum(timeelapse_seconds) where eventtype = "A"
返回 750 秒的结果,因为它包含事件 #6。
Event EventType TimeElapse_Seconds
----------------------------------
1 C 50
1 A 100
2 A 100
3 B 200
4 A 350
5 C 100
6 A 200
谢谢!
更新
道歉,因为我刚刚意识到我的数据集。将有一个带有 EventType C 的初始事件 1。所以,我需要找到第二个实例而不是第一个(所以 min 不起作用)。我已经更新了示例表。
解决方案
以下是 BigQuery 标准 SQL
#standardSQL
SELECT SUM(TimeElapse_Seconds) TotalElapse_Seconds
FROM (
SELECT EventType, TimeElapse_Seconds,
COUNTIF(EventType = 'C') OVER(ORDER BY Event) = 1 BeforeC
FROM `project.dataset.table`
)
WHERE EventType = 'A' AND BeforeC
如果适用于您的 questin 中的样本数据 - 结果是
Row TotalElapse_Seconds
1 550
推荐阅读
- javascript - 将数字转换为从该数字倒数到零的项目数组
- aes - 分块解密 AES 128 CBC 加密对象
- apache-kafka - 如何确保我认为通过 kafka 进行的微服务交互是正确的?
- java - JSONAssert 忽略特定字段的顺序
- android - 无法从 MediaStore 相机 Android 加载 ImageView
- c# - 集合中的“_version”有什么用?
- sql-server - 如何使用 AJAX 从 MVC 中的数据库中检索“大”文件
- c# - 获取电报频道消息的消息ID
- javascript - 缺少 1 天的天数差异(javascript)?
- c# - AmazonCognitoIdentityProviderException:用户无权对资源执行 cognito-idp:DescribeUserPool