手順:
- 行番号を作成します、
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;