Schritte:
- Erstellen Sie eine Zeilennummer,
rn, über alle Zeilen im Fallidist nicht in der Reihenfolge. - Erstellen Sie eine Zeilennummer,
approv_rn, partitioniert nachEmailApproveddamit wir wissen, wannEmailApproved = 1ist zum zweiten Mal - Verwenden Sie eine
outer applyum die Zeilennummer dessecondzu 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
EmailApprovedAufzeichnungen vorhanden dann gelten dieouter applygibt 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;