Schritte:
- Erstellen Sie eine Zeilennummer,
rn
, über alle Zeilen im Fallid
ist nicht in der Reihenfolge. - Erstellen Sie eine Zeilennummer,
approv_rn
, partitioniert nachEmailApproved
damit wir wissen, wannEmailApproved = 1
ist zum zweiten Mal - Verwenden Sie eine
outer apply
um die Zeilennummer dessecond
zu finden Instanz vonEmailApproved = 1
- Im
where
-Klausel filtert alle Zeilen heraus, in denen die Zeilennummer>=
ist den in Schritt 3 gefundenen Wert. - Bei 1 oder 0
EmailApproved
Aufzeichnungen vorhanden dann gelten dieouter apply
gibt null zurück, in diesem Fall werden alle verfügbaren Zeilen zurückgegeben.
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;