Как до финального, но самого раннего события с последовательными рядами - PullRequest
0 голосов
/ 01 апреля 2019
RowNo RegID Code UpdateDate
1  101  CMPS    1/12/2017
2  101  MUTC    2/12/2017
3  101  CMPS    10/12/2017
4  101  CMPS    15/01/2018
5  101  MUTC    16/02/2018
6  101  CMPS    30/06/2018
7  101  CMPS    15/07/2018
8  101  CMPS    30/01/2019

В приведенном выше примере для RegID = 101 имеется несколько кодов «CMPS».Некоторые RegID, не имеют «CMPS».Те должны быть отфильтрованы в первую очередь.В качестве первого шага мне нужно выбрать те RegID, где есть хотя бы одно вхождение с кодом «CMPS».

Последний шаг - выбрать строку «6».Это первое вхождение кода «CMPS» в последние последовательные строки с кодом «CMPS».Я не хочу строку «1», потому что был другой код, кроме кода «CMPS», следующего за первым CMPS.Мне нужно выбрать строку «6», так как она является самой ранней из последнего набора последовательных «CMPS» для этого RegID.

Я пробовал это, но это не сработало:

Select top 100  
     rux.RegistrationId
    ,row_number() over (partition by rux.RegistrationId order by        rux.UpdateDate, rux.Code ASC) as rownum
    ,rux.Code
    ,rux.UpdateDate 
from RegUpdatesToFromSTA rux

where Exists (
    Select 1 
    from  RegUpdatesToFromSTA ruy
    where Code = 'CMPS')

Конечные результаты должны быть:

Row no  RegID   Code    Update Date
6   101 CMPS    30/06/2018
...