Langkah-langkah:
- Buat nomor baris,
rn
, di semua baris jikaid
tidak berurutan. - Buat nomor baris,
approv_rn
, dipartisi olehEmailApproved
jadi kita tahu kapanEmailApproved = 1
untuk kedua kalinya - Gunakan
outer apply
untuk menemukan nomor barissecond
contohEmailApproved = 1
- Di
where
klausa menyaring semua baris dengan nomor baris>=
nilai yang ditemukan di langkah 3. - Jika ada 1 atau 0
EmailApproved
catatan tersedia makaouter apply
akan mengembalikan null, dalam hal ini mengembalikan semua baris yang tersedia.
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;