Stappen:
- Maak een rijnummer,
rn
, over alle rijen voor het gevalid
staat niet op volgorde. - Maak een rijnummer,
approv_rn
, gepartitioneerd doorEmailApproved
zodat we weten wanneerEmailApproved = 1
voor de tweede keer - Gebruik een
outer apply
om het rijnummer van desecond
. te vinden instantie vanEmailApproved = 1
- In de
where
clausule filtert alle rijen uit waar het rijnummer is>=
de waarde gevonden in stap 3. - Als er 1 of 0 is
EmailApproved
records beschikbaar, dan zijn deouter apply
retourneert null, in welk geval alle beschikbare rijen worden geretourneerd.
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;