Не могли бы вы, пожалуйста, попробовать следующий оператор SQLScript select
Возможно, что это может быть решено проще.Я использовал подвыборки, чтобы отобразить решение шаг за шагом.
Внутренний большинство SELECT проверяет, есть ли изменение с другого значения на 'A', используя SQL Lag () function
Следующий SubSelect выполняет решение SQL-счет , используя агрегатную функцию SUM () с неограниченным предшествующим параметром
Самый внешний SELECT использует функцию Row_Number () для создания желаемого значения счетчика.
select
id,
date,
flag,
case when flag = 'A' then
row_number() over (partition by date, groupid order by id)
else 0
end as rn
from (
select
id,
date,
flag,
sum(is_change) over (partition by date order by id rows unbounded preceding) groupid -- running sum
from (
select
id,
date,
flag,
case
when
flag = 'A' and
(
(lag(flag, 1) over (partition by date order by id)) is null or
(lag(flag, 1) over (partition by date order by id)) = 'B'
) -- check prev
then 1
else 0
end as is_change
from TblTest
) tbl
) t
order by date, id
Я надеюсь, что это полезно и может быть использовано в вашей разработке