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