我有一个表,该表顺序跟踪事件并计算每个事件的时间。我要使用以下示例数据来做的是计算在第二个事件C发生之前 发生的所有事件A的经过时间(秒)的总数。因此,在下面的示例中,我希望输出550秒。
很明显,
select sum(timeelapse_seconds) where eventtype = "A"
由于包含事件#6,因此返回750秒的结果。
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不起作用)。我已经更新了示例表。
答案 0 :(得分:2)
以下是用于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
如果要应用到您的查询中的样本数据-结果为
Row TotalElapse_Seconds
1 550
答案 1 :(得分:1)
好吧,首先,您必须找到事件C的第二次出现的位置,然后将索引为次要位置的所有A事件的TimeElapse_Seconds值相加。所以:
SELECT SUM(TimeElapse_Seconds)
FROM events
WHERE EventType = 'A'
AND Event < (SELECT MIN(Event) -- Second appearance of event C
FROM events
WHERE EventType = 'C'
AND Event > (SELECT MIN(Event) -- First appearance of event C
FROM events
WHERE EventType = 'C'))
答案 2 :(得分:0)
一种方法是使用窗口函数:
select sum(TimeElapse_Seconds)
from (select t.*,
min(case when eventtype = 'C' then event end) over (order by event) as min_c_event
from t
) t
where event < min_c_event and event = 'A';
答案 3 :(得分:0)
假设Event
确定用于确定之前含义的顺序...
SELECT sum(TimeElapse_Seconds)
FROM events
WHERE EventType = 'A' AND Event < (SELECT min(Event) FROM events WHERE EventType = 'C');
是一种方法。为了获得最佳结果,您需要在(EventType, Event)