当子窗口具有递增值时如何增加父组编号?
Posted
技术标签:
【中文标题】当子窗口具有递增值时如何增加父组编号?【英文标题】:How to increment a parent group number when the child window has incrementing values? 【发布时间】:2022-01-24 03:17:31 【问题描述】:我正在使用 Spark SQL 3.2.0
请参阅DB Fiddle 链接,了解我的数据集和预期结果的简化示例。
抽象地说,我有一个包含一系列相关事件的数据集,这些事件可以按时间顺序和事件编号进行分组。当按时间和事件编号排序时,每次事件编号重置为 1 时,您都在查看一组新事件。
我了解如何使用row_number()
或dense_rank()
来增加event_group_number
其中sub_event_number = 1
,但我不确定如何使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
我将不胜感激,我很乐意回答任何问题。
【问题讨论】:
【参考方案1】:您似乎正在寻找累积条件和:
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
【讨论】:
以上是关于当子窗口具有递增值时如何增加父组编号?的主要内容,如果未能解决你的问题,请参考以下文章