declare @t table (d datetime not null, status smallint not null)
insert into @t values (dateadd(mi,-1,getdate()), 0)
insert into @t values (getdate(), 1)
insert into @t values (dateadd(mi,1,getdate()), 1)
insert into @t values (dateadd(mi,2,getdate()), 1)
insert into @t values (dateadd(mi,3,getdate()), 2)
insert into @t values (dateadd(mi,4,getdate()), 0)
insert into @t values (dateadd(mi,5,getdate()), 2)
insert into @t values (dateadd(mi,6,getdate()), 0)
insert into @t values (dateadd(mi,7,getdate()), 0)
insert into @t values (dateadd(mi,8,getdate()), 1)
insert into @t values (dateadd(mi,9,getdate()), 1)
insert into @t values (dateadd(mi,10,getdate()), 3)
select * from @t
select case t1.status when 0 then null else t1.d end as nd, t1.status
from @t t1
where t1.status > 0 or
0 < isnull((select max(t2.status) from @t t2
where t2.d = (select max(t3.d)
from @t t3
where t3.d < t1.d))
,1)
order by t1.d
|