CREATE TABLE #mytable ( ID INT IDENTITY(1,1) , DateValue DATETIME, Prd nvarchar(250), Statusid INT )INSERT INTO #mytable (DateValue,Prd, Statusid) SELECT 'Oct 17 2007 12:00AM','A','1' UNION ALLSELECT 'Oct 17 2007 12:00AM','A','1' UNION ALL SELECT 'Oct 17 2007 12:00AM','A','1' UNION ALL SELECT 'Oct 17 2007 12:00AM','A','1' UNION ALLSELECT 'Oct 17 2007 12:00AM','B','1' UNION ALL SELECT 'Oct 17 2007 12:00AM','B','1' UNION ALL SELECT 'Oct 17 2007 12:00AM','B','1' UNION ALL SELECT 'Oct 17 2007 12:00AM','B','2' UNION ALL SELECT 'Oct 17 2007 12:00AM','B','1' UNION ALLSELECT 'Oct 17 2007 12:00AM','B','2' UNION ALLSELECT 'Oct 17 2007 12:00AM','A','1' UNION ALL SELECT 'Oct 17 2007 12:00AM','A','1' UNION ALL SELECT 'Oct 17 2007 12:00AM','A','1' UNION ALL SELECT 'Oct 17 2007 12:00AM','A','1' UNION ALL SELECT 'Oct 17 2007 12:00AM','A','2'update #MyTableset DateValue = dateadd(minute, ID, DateValue)alter table #MyTableadd SetFirst bit not null default(0), SetLast bit not null default(0);with CTE (Row, Date, Prd, StatusID, SetFirst, SetLast) as (select row_number() over (partition by Prd order by DateValue), DateValue, Prd, StatusID, SetFirst, SetLast from #MyTable)update C1set SetFirst = case when C2.row is not null then 1 when not exists (select * from #MyTable mt where mt.prd = c1.prd and mt.datevalue < c1.date) then 1 else 0end,SetLast =case when C3.row is not null then 1 when not exists (select * from #MyTable mt where mt.prd = c1.prd and mt.datevalue > c1.date) then 1 else 0endfrom CTE C1left outer join CTE C2 -- The prior 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 -- Status 2 and next row is a 1 on C1.Prd = C3.Prd and C1.Row = C3.Row-1 and C1.StatusID = 2 and C3.StatusID = 1select *from #MyTable