如何按时间顺序将数字添加到可能重复的分组列中

时间:2015-06-12 20:45:05

标签: sql sql-server

查询:

@NotBlank(message = "{error.notblank.part1of2}Address Line 1{error.notblank.part2of2}")
private String addressLineOne;

结果:

我需要这样结束:

完成此操作后,我可以按行号分组以获取每个行号组(1,2,3 ......)的MAX()和MIN()。

如果最后两个记录是" T",那么我就有2个4'等等。

编辑

为了澄清,我需要对每个DateFlag进行分组并为每个组添加一个数字,但它必须按顺序排列......(按日期)。

因此,在此示例中,您有2条记录属于第一组(组1)。

然后是第2组(T)的一条记录

然后是第3组(H)的一条记录

然后是第4组(T)的一条记录

1 个答案:

答案 0 :(得分:2)

您可以使用row_number()值的差异来描述该组,然后使用额外的dense_rank()来枚举它们。我认为以下工作:

select el.*, dense_rank() over (partition by EmployeeId order by grp)
from (select el.*,
             (row_number() over (partition by EmployeeId order by date) - 
              row_number() over (partition by EmployeeId, DateFlag order by date)
             ) as grp
      from @EmploymentLength el
     ) el;

在某些情况下,grp值可能实际上会重复员工中的不同群组。在这种情况下,最好使用每个组的最小日期进行枚举:

select el.*, dense_rank() over (partition by EmployeeId, order by grpdate)
from (select el.*, min(date) over (partition by EmployeeId, DateFlag, grp) as grpdate
      from (select el.*,
                   (row_number() over (partition by EmployeeId order by date) - 
                    row_number() over (partition by EmployeeId, DateFlag order by date)
                   ) as grp
            from @EmploymentLength el
           ) el
     ) el