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ợpidkhô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 = 1lần thứ hai - Sử dụng
outer applyđể tìm số hàng củasecondbản sao củaEmailApproved = 1 - Trong
wheremệ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
EmailApprovedcác bản ghi có sẵn thìouter applysẽ 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;