Các bước:
- Tạo một số hàng,
rn
, trên tất cả các hàng trong trường hợpid
không theo trình tự. - Tạo một số hàng,
approv_rn
, được phân vùng bởiEmailApproved
để chúng tôi biết khi nàoEmailApproved = 1
lần thứ hai - Sử dụng
outer apply
để tìm số hàng củasecond
bản sao củaEmailApproved = 1
- Trong
where
mệnh đề lọc ra tất cả các hàng có số hàng là>=
giá trị được tìm thấy trong bước 3. - Nếu có 1 hoặc 0
EmailApproved
các bản ghi có sẵn thìouter apply
sẽ trả về null, trong trường hợp đó, trả về tất cả các hàng có sẵn.
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;