查找具有间隙和岛屿的连续行的最小值和最大值
在包含由行表示的事件序列的有序数据集的上下文中在一个表中,任务是确定共享相同事件类型的连续行的最小和最大时间间隔。当处理涉及间隙和岛屿的数据时,就会出现这个问题,使得传统的聚合方法不够用。
理解输入
输入表由以下列组成:
识别连续组
识别连续的行组对于相同的事件类型,我们计算事件类型的行号与整个行之间的差异编号:
row_number() over (partition by name, act order by rn) as seqnum_na row_number() over (partition by name order by rn) as seqnum_n
这些新列 seqnum_na 和 seqnum_n 分别表示事件类型的序列号和总体序列号。从 seqnum_n 中减去 seqnum_na 会创建一个新列,该列表示事件类型中每个连续行子集的组编号。
与组编号的聚合
与组编号确定后,我们可以汇总开始时间和结束时间,以找到每个时间的最小值和最大值组:
select name, act, min(startt) as startt, max(endd) as endd from (select i.*, row_number() over (partition by name, act order by rn) as seqnum_na, row_number() over (partition by name order by rn) as seqnum_n from input i ) i group by (seqnum_n - seqnum_na), name, act;
通过按组编号以及名称和事件类型进行分组,我们可以有效地识别和聚合每个子集中的连续行,从而提供所需的最小和最大时间间隔。
以上是如何找到具有间隙和岛屿的连续事件的最小和最大时间间隔?的详细内容。更多信息请关注PHP中文网其他相关文章!