首页 > 解决方案 > 在 SQL 中将重复分组为批次

问题描述

我正在尝试按批次对我的表进行分组,当类型发生变化时,每个批次都结束(下一个开始)。数据按 num 排序。我拥有的数据如下:

type      num
-----------------
Agent      1
Agent      2
User       3
User       4
Agent      5
User       6
User       7

我正在寻找添加批号:

type      num    batch
----------------------
Agent      1       1
Agent      2       1
User       3       2
User       4       2
Agent      5       3
User       6       4
User       7       4

我已经尝试过dense_rank和领先/落后但没有成功提前谢谢!

标签: sqlgrouping

解决方案


假设num没有间隙,您可以减去一个序列以获得每个组的常数并使用dense_rank()

select t.*,
       dense_rank() over (order by num - seqnum, type) as batch_num
from (select t.*, row_number() over (partition by type order by num) as seqnum
      from t
     ) t;

您还可以使用滞后和累积总和:

select t.*,
       sum(case when prev_type = type then 0 else 1 end) over (order by num) as batch_num
from (select t.*, lag(type) over (order by num) as prev_type
      from t
     ) t;

推荐阅读