当子 window 具有递增值时如何递增父组号?

How to increment a parent group number when the child window has incrementing values?

我正在使用 Spark SQL 3.2.0

请参阅 DB Fiddle link 以获取我的数据集和期望结果的简化示例。

抽象地说,我有一个包含一系列相关事件的数据集,这些事件可以按时间顺序和事件编号进行分组。按时间和事件编号排序时,每次事件编号重置为 1 时,您正在查看一组新的事件。

我知道如何使用 row_number()dense_rank()sub_event_number = 1 处增加 event_group_number,但我不确定如何在 sub_event_number > 1 处创建行] 取正确的 event_group_number.

我目前正在做以下事情:

case 
    when sub_event_number = 1 and is_event_type
    then row_number() over (partition by context_id, event_id, sub_event_number order by is_event_type asc, start_time asc) - 1
    else null
end as event_group_number

如果有任何帮助,我将不胜感激,我很乐意回答任何问题。

您似乎在寻找累积条件和:

SELECT context_id,
       event_id,
       start_time,
       NULLIF(
          SUM(CASE WHEN sub_event_number = 1 THEN 1 ELSE 0 END) OVER(
                         PARTITION BY context_id, event_id 
                         ORDER BY is_event_type, start_time) - 1,
          0
       ) AS event_group_number
FROM   foobar
ORDER  BY context_id, event_id, is_event_type, start_time  

db-fiddle