Pasos:
- Cree un número de fila,
rn
, sobre todas las filas en el caso deid
no está en secuencia. - Cree un número de fila,
approv_rn
, particionado porEmailApproved
para que sepamos cuandoEmailApproved = 1
por segunda vez - Usar una
outer apply
para encontrar el número de fila delsecond
instancia deEmailApproved = 1
- En el
where
la cláusula filtra todas las filas donde el número de fila es>=
el valor encontrado en el paso 3. - Si hay 1 o 0
EmailApproved
registros disponibles, entonces elouter apply
devolverá nulo, en cuyo caso devolverá todas las filas disponibles.
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;