Если я правильно понимаю, вам нужен «последний» ряд начальной последовательности. Исходя из вашего вопроса:
select t.*
from t
where t.id < (select min(t2.id)
from t t2
where t2.code <> 'A001' -- not NOT EQUALS
)
order by t1.id desc;
Представляется более разумным, что 'A001'
не будет жестко закодирован, а будет рассчитываться как «первое» значение.
В этом случае:
select t.*
from t cross join
(select top (1) t.*
from t
order by t.id
) top1
where t.id < (select min(t2.id)
from t t2
where t2.code <> top1.id -- not NOT EQUALS
)
order by t1.id desc;
Необходимо настроить, если все коды одинаковы. Но в ваших примерах данных у вас есть несколько значений.
С помощью оконных функций вы можете выразить это как:
select top (1) t.*
from (select t.*,
min(case when code <> first_code then id end) over () as first_notcode_id
from (select t.*,
first_value(code) over (order by id) as first_code
from t
) t
) t
where first_notcode_id is null or
id < first_notcode_id
order by id;