Étapes :
- Créez un numéro de ligne,
rn
, sur toutes les lignes au cas oùid
n'est pas dans l'ordre. - Créez un numéro de ligne,
approv_rn
, partitionné parEmailApproved
donc nous savons quandEmailApproved = 1
pour la deuxième fois - Utilisez une
outer apply
pour trouver le numéro de ligne dusecond
instance deEmailApproved = 1
- Dans le
where
clause filtre toutes les lignes où le numéro de ligne est>=
la valeur trouvée à l'étape 3. - S'il y a 1 ou 0
EmailApproved
enregistrements disponibles puis l'outer apply
renverra null, auquel cas renverra toutes les lignes 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;