当子 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
我正在使用 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