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

SQL में सभी पूर्णांक अंतराल खोजें

विचार यह देखना है कि अंतराल कहां से शुरू होता है। मुझे लगता है कि आप SQL सर्वर 2012 का उपयोग कर रहे हैं, और इसलिए lag() और lead() कार्य। निम्नलिखित को अगला id प्राप्त होता है :

select t.*, lead(id) over (order by id) as nextid
from t;

अगर गैप हो तो nextid <> id+1 . अब आप where . का उपयोग करके अंतराल को चिह्नित कर सकते हैं :

select id+1 as FirstMissingId, nextid - 1 as LastMissingId
from (select t.*, lead(id) over (order by id) as nextid
      from t
     ) t
where nextid <> id+1;

संपादित करें:

बिना lead() , मैं सहसंबद्ध उपश्रेणी के साथ भी ऐसा ही करूंगा:

select id+1 as FirstMissingId, nextid - 1 as LastMissingId
from (select t.*,
             (select top 1 id
              from t t2
              where t2.id > t.id
              order by t2.id
             ) as nextid
      from t
     ) t
where nextid <> id+1;

id मानते हुए टेबल पर प्राथमिक कुंजी है (या यहां तक ​​कि इसमें केवल एक इंडेक्स है), दोनों विधियों में उचित प्रदर्शन होना चाहिए।



  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 सर्वर डेटाबेस में सभी तालिकाओं में पहचान कॉलम में प्राथमिक कुंजी बाधा कैसे जोड़ें - SQL सर्वर / TSQL ट्यूटोरियल भाग 63

  2. RAISERROR समस्या SQL सर्वर 2012 में माइग्रेशन के बाद से

  3. मैं रिपोर्टिंग सर्विसेज एक्सप्रेशन भाषा में इफ इफ स्टेटमेंट कैसे लिखूं?

  4. SQL सर्वर में निष्पादन योजनाओं की तुलना करें

  5. NVARCHAR(MAX) के लिए अधिकतम वर्ण क्या हैं?