कदम:
- पंक्ति संख्या बनाएं,
rn
,id
. के मामले में सभी पंक्तियों में क्रम में नहीं है। - पंक्ति संख्या बनाएं,
approv_rn
,EmailApproved
. द्वारा विभाजित इसलिए हम जानते हैं किEmailApproved = 1
. कब दूसरी बार - एक
outer apply
का उपयोग करेंsecond
. की पंक्ति संख्या ज्ञात करने के लिएEmailApproved = 1
. का उदाहरण where
में क्लॉज उन सभी पंक्तियों को फ़िल्टर करता है जहाँ पंक्ति संख्या>=
है चरण 3 में पाया गया मान।- अगर 1 या 0 है
EmailApproved
रिकॉर्ड उपलब्ध हैं तोouter apply
शून्य वापस आ जाएगा, इस मामले में सभी उपलब्ध पंक्तियों को वापस कर देगा।
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;