Étapes :
- Créez un numéro de ligne,
rn, sur toutes les lignes au cas oùidn'est pas dans l'ordre. - Créez un numéro de ligne,
approv_rn, partitionné parEmailApproveddonc nous savons quandEmailApproved = 1pour la deuxième fois - Utilisez une
outer applypour trouver le numéro de ligne dusecondinstance deEmailApproved = 1 - Dans le
whereclause 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
EmailApprovedenregistrements disponibles puis l'outer applyrenverra 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;