Trin:
- Opret et rækkenummer,
rn
, over alle rækker i tilfældeid
er ikke i rækkefølge. - Opret et rækkenummer,
approv_rn
, opdelt afEmailApproved
så vi ved hvornårEmailApproved = 1
for anden gang - Brug en
outer apply
for at finde rækkenummeret forsecond
forekomst afEmailApproved = 1
- I
where
klausul filtrere alle rækker ud, hvor rækkenummeret er>=
værdien fundet i trin 3. - Hvis der er 1 eller 0
EmailApproved
tilgængelige poster, såouter apply
vil returnere null, i hvilket tilfælde returnerer alle tilgængelige rækker.
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;