Kroky:
- Vytvořte číslo řádku
rn
, přes všechny řádky v případěid
není v pořadí. - Vytvořte číslo řádku,
approv_rn
, rozdělené podleEmailApproved
takže víme, kdyEmailApproved = 1
podruhé - Použijte
outer apply
najít číslo řádkusecond
instanceEmailApproved = 1
- V
where
klauzule odfiltrovat všechny řádky, kde je číslo řádku>=
hodnotu nalezenou v kroku 3. - Pokud je 1 nebo 0
EmailApproved
záznamy dostupné, pakouter apply
vrátí hodnotu null, v takovém případě vrátí všechny dostupné řádky.
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;