SQL 根据现有序列排名?

SQL Ranking on existing sequence?

我有一个数据集,我正在尝试对其应用二级排名,但不确定如何进行。

数据集看起来像:

ID   Sequence Event
xxx  1  
xxx  2         B
xxx  3         B
xxx  4         B
xxx  5         B
xxx  6         A
xxx  7  
xxx  8         C
xxx  9         C
xxx  10        C
xxx  11        C
xxx  12        C

我尝试了一些 Ranking/Partitioning 组合,我得到的最接近的组合是:

DENSE_RANK() OVER (Partition BY ID ORDER BY ID, Event) 

然而,当我这样做时,结果排名以无序的方式对事件进行排名,我知道它是按事件的字母顺序排列的:

ID   Sequence Event  Event Sequence
xxx  1               1
xxx  2         B     3
xxx  3         B     3
xxx  4         B     3
xxx  5         B     3
xxx  6         A     2
xxx  7               1
xxx  8         C     4
xxx  9         C     4
xxx  10        C     4
xxx  11        C     4
xxx  12        C     4     

我试图将序列添加到排序方式中,但它不再按照我想要的方式对事件进行分组,而是简单地模拟序列系列。

我希望的是:

ID   Sequence Event  Event Sequence
xxx  1               1
xxx  2         B     2
xxx  3         B     2
xxx  4         B     2
xxx  5         B     2
xxx  6         A     3
xxx  7               1
xxx  8         C     4
xxx  9         C     4
xxx  10        C     4
xxx  11        C     4
xxx  12        C     4

这可能吗?

如果我没理解错的话,您可以使用 id 值中的最小值进行排序:

select t.*, dense_rank() over (order by min_sequence) as event_sequence
from (select t.*, min(sequence) over (partition by event) as min_sequence
      from t
     ) t
order by t.id;

试试这个:

   DECLARE @mytab table (id INT,Sequence INT, [Event] VARCHAR(1))

    insert into @mytab
    SELECT 1,1,''
    union
    SELECT 1,2,'B'
    union
    SELECT 1,3,'B'
    union
    SELECT 1,4,'B'
    union
    SELECT 1,5,'B'
    union
    SELECT 1,6,'A'
    union
    SELECT 1,7,''
    union
    SELECT 1,8,'C'
    union
    SELECT 1,9,'C'
    union
    SELECT 1,10,'C'
    union
    SELECT 1,11,'C'
    union
    SELECT 1,12,'C'


    select *, DENSE_RANK()OVER( partition by id Order by id,[event],(SELECT NULL)) 
    from @mytab
    order by id,Sequence