Стъпки:
- Създайте номер на ред,
rn
, върху всички редове в регистърid
не е в последователност. - Създайте номер на ред,
approv_rn
, разделена отEmailApproved
така че да знаем когаEmailApproved = 1
за втори път - Използвайте
outer apply
за да намерите номера на реда наsecond
екземпляр наEmailApproved = 1
- В
where
клауза филтрира всички редове, където номерът на реда е>=
стойността, намерена в стъпка 3. - Ако има 1 или 0
EmailApproved
налични записи, тогаваouter apply
ще върне null, в който случай ще върне всички налични редове.
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;