;with CTE (Row, Date, Prd, StatusID, SetFirst, SetLast) as (select row_number() over (partition by Prd order by Date), Date, Prd, StatusID, SetFirst, SetLast from #TempTable)update C1set SetFirst = case when C2.row is not null then 1 else 0end,SetLast =case when C3.row is not null then 1 else 0endfrom CTE C1left outer join CTE C2 -- The next row is a 2 on C1.Prd = C2.Prd and C1.Row = C2.Row-1 and C1.StatusID = 1 and C2.StatusID = 2left outer join CTE C3 -- The prior row is a 2 on C1.Prd = C3.Prd and C1.Row = C3.Row+1 and C1.StatusID = 2 and C3.StatusID = 1
;with Sets1 (ID, SetID1) as (select id, row_number() over (partition by prd order by date) from #TempTable where SetFirst = 1),Sets2 (ID, SetID2) as (select id, row_number() over (partition by prd order by date) from #TempTable where SetLast = 1)update TempTableset SetID = SetID1from Sets1inner join Sets2 on Sets1.SetID1 = Sets2.SetID2inner join #TempTable TempTable on TempTable.ID between SetID1 and SetID2;with SetSeq (ID, SetSequence) as (select ID, row_number() over (partition by SetID order by date) from #TempTable)update TempTableset SetSequence = SetSeq.SetSequencefrom #TempTable TempTableinner join SetSeq on TempTable.ID = SetSeq.ID