Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

शीर्ष पंक्तियों का चयन करें जब तक कि विशिष्ट कॉलम में मान दो बार दिखाई न दे

कदम:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL में न्यूनतम दो मान प्राप्त करना

  2. Sql Server 2008 का उपयोग करके तालिका से शीर्ष 1000 पंक्तियों को कैसे हटाएं?

  3. अनेक दिनांक सीमाओं के बीच मिनटों का योग

  4. SQL सर्वर में PARSE() बनाम TRY_PARSE():क्या अंतर है?

  5. एकीकृत सुरक्षा =असत्य