Passos:
- Crie um número de linha,
rn
, em todas as linhas casoid
não está em sequência. - Crie um número de linha,
approv_rn
, particionado porEmailApproved
para sabermos quandoEmailApproved = 1
pela segunda vez - Use um
outer apply
para encontrar o número da linha dosecond
instância deEmailApproved = 1
- No
where
cláusula filtra todas as linhas em que o número da linha é>=
o valor encontrado na etapa 3. - Se houver 1 ou 0
EmailApproved
registros disponíveis, então oouter apply
retornará null e, nesse caso, retornará todas as linhas disponíveis.
with test as
(
select *,
rn = row_number() over (order by Created desc),
approv_rn = row_number() over (partition by EmailApproved
order by Created desc)
from @Test
)
select *
from test t
outer apply
(
select x.rn
from test x
where x.EmailApproved = 1
and x.approv_rn = 2
) x
where t.rn < x.rn or x.rn is null
order by t.Created desc;