Passi:
- Crea un numero di riga,
rn
, su tutte le righe nel casoid
non è in sequenza. - Crea un numero di riga,
approv_rn
, partizionato daEmailApproved
quindi sappiamo quandoEmailApproved = 1
per la seconda volta - Utilizza un
outer apply
per trovare il numero di riga delsecond
istanza diEmailApproved = 1
- Nel
where
la clausola filtra tutte le righe in cui il numero di riga è>=
il valore trovato nel passaggio 3. - Se è presente 1 o 0
EmailApproved
record disponibili, quindiouter apply
restituirà null, nel qual caso restituirà tutte le righe disponibili.
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;