首页 > 解决方案 > 根据事件序列有条件地隔离/求和数据

问题描述

我有一个表格,可以按顺序跟踪事件并计算每个事件的时间。我想要使​​用下面的示例数据做的是计算在第二个事件 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 不起作用)。我已经更新了示例表。

标签: sqlgoogle-bigquerybigquery-standard-sql

解决方案


以下是 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  

推荐阅读