Sql 如何对周期性发生的连续事件序列进行聚合?

Sql 如何对周期性发生的连续事件序列进行聚合?,sql,postgresql,Sql,Postgresql,表: 指示 号码 停止 6. 停止 2. 开始 3. 开始 8. 停止 7. 停止 3. 停止 2. 开始 8. 开始 3. 这是一个间隙和孤岛问题——假设您有一列指定了顺序。最简单的解决方案可能是使用行号的差异来标识组: select indication, sum(num) from (select ss.*, row_number() over (partition by indication order by ?) as seqnum_2,

表:

指示 号码 停止 6. 停止 2. 开始 3. 开始 8. 停止 7. 停止 3. 停止 2. 开始 8. 开始 3.
这是一个间隙和孤岛问题——假设您有一列指定了顺序。最简单的解决方案可能是使用行号的差异来标识组:

select indication, sum(num)
from (select ss.*,
             row_number() over (partition by indication order by ?) as seqnum_2,
             row_number() over (order by ?) as seqnum
      from stop_start ss
     ) ss
group by indication, (seqnum - seqnum_2);
用于指定排序的列


这是一种欺骗。

请解释一下逻辑。如果假设行的顺序,那么SQL需要一个列来包含该顺序。