识别连续行组进行聚合
问题:
检索 startt 和 startt 的最小值和最大值end 表示特定行为值的连续行。每个唯一的名称定义了不同的行为发生顺序。输入不提供用于行标识的附加列。
方法:
为了在每个名称-行为组中建立行标识,我们使用行号:
row_number() over (partition by name, act order by rn) as act_n row_number() over (partition by name order by rn) as rn
这些行号使我们能够区分组内的行并识别连续的行为范围
聚合最小值和最大值:
为了找到每个名称-行为组合所需的输出,我们聚合连续行组中的数据。关键的计算是两个行号之间的差异:
rn - act_n diff
这个差异代表每个组内的位置,使我们能够确定连续的范围。
select name, act, min(startt) startt, max(endd) endd from ( select name, act, row_number() over (partition by name order by name, startt) rn, row_number() over (partition by name, act order by name, startt) act_n, startt, endd from @t ) group by (rn - act_n), name, act order by name;
此查询对数据按行号差,提供所需的输出。
以上是如何根据特定的 Act 值查找连续行的最小值和最大值?的详细内容。更多信息请关注PHP中文网其他相关文章!