gpt4 book ai didi

sql - SQL 中的序列编号

转载 作者:行者123 更新时间:2023-12-01 00:33:31 26 4
gpt4 key购买 nike

我有某些事件的事件列表(A 开始到 H 结束)。这些可以以任何顺序、任意次数发生,也可以重新启动。我需要确定事件中的事件块。

例如:一个 B C D E F G H B C D H C D E F H E F G H

它只开始一次 (A) 但多次结束

需要对这些事件进行编号以识别集合(它结束了多少次)

output: 1 1 1 1 1 1 1 2 2 2 2 3 3 3 3 3 4 4 4 4 5

这有助于我确定事件结束 (H) 5-1 = 4 次

最佳答案

看起来您想在给定值之前计算“H”和“A”的数量。这需要有一个指定排序的列。让我假设此列名为 id .

然后,您可以使用窗口函数执行此操作:

select t.*,
sum(case when col = 'H' then 1 else 0 end) over (partition by grp order by id) + 1 as output
from (select t.*,
sum(case when col = 'A' then 1 else 0 end) over (order by id) as grp
from t
) t;

子查询通过执行“A”的累积总和来定义“事件”组。然后,外部查询通过执行“E”的累积总和来定义“事件”组。

老实说,我无法判断“H”是前一个值还是下一个值的一部分。如果是下一个值,则查询可以使用 window 子句或对逻辑稍作调整:
       (sum(case when col = 'H' then 1 else 0 end) over (partition by grp order by id) +
(case when col = 'H' then 0 else 1 end)
) as output

关于sql - SQL 中的序列编号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42831142/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com