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

इतिहास परिवर्तन तालिका से संस्थाओं का चयन करने के लिए SQL क्वेरी

मैंने जो पढ़ा है उससे मुझे लगता है कि आप उन सभी कंपनियों को चाहते हैं जिनकी आपकी तिथि सीमा के अंदर स्थिति 1 थी। अगर आप यही चाहते हैं, तो यह बहुत आसान है।

निम्नलिखित कथन को काम करना चाहिए:

SELECT C.*
  FROM COMPANY C
  LEFT JOIN ( SELECT H.STATUS, H.COMPANY_ID
                FROM COMPANYSTATUS H
               WHERE H.STATUS_EFFECTIVE_DATE = (SELECT MAX(H1.STATUS_EFFECTIVE_DATE)
                                                  FROM COMPANYSTATUS H1
                                                 WHERE H1.COMPANY_ID = H.COMPANY_ID
                                                   AND H1.STATUS_EFFECTIVE_DATE <= '20171231'
             ) CH ON CH.COMPANY_ID = C.ID   
 WHERE ( C.STATUS = 1 AND CH.COMPANY_ID IS NULL ) -- CASE #1 : STATUS = 1 AND NEVER CHANGED (NO HISTORY)
    OR H.STATUS = 1

मैंने जो किया वह आपकी तिथि सीमा के अंत तक अंतिम स्थिति के साथ एक नेस्टेड दृश्य बनाने के लिए था, इसलिए यदि कंपनी की स्थिति का अंतिम परिवर्तन 1 है तो इस कंपनी को आपके परिणाम में शामिल किया जाना चाहिए। हम आपकी तिथि सीमा के बाद परिवर्तनों की परवाह नहीं करते हैं, इसलिए मैंने प्रतिबंध को नेस्टेड दृश्य के अंदर रखा है।

इस अनुरोध के लिए आपकी सीमा की शुरुआत महत्वहीन है। आपको शायद अन्य उद्देश्यों के लिए, अन्य तालिकाओं में शामिल होने की आवश्यकता है।

मैं Oracle आदमी हूं, इसलिए मुझे लगता है कि Ι Oracle विश्लेषण का उपयोग करके इस कथन को बहुत बेहतर बना सकता है, लेकिन मुझे लगता है कि यह SQL सर्वर के लिए एक मान्य कथन होगा।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. प्रक्रिया या कार्य !!! बहुत सारे तर्क निर्दिष्ट हैं

  2. SQL सर्वर कर्सर - एकाधिक सर्वरों के माध्यम से लूप करें और क्वेरी निष्पादित करें

  3. SQL सर्वर क्वेरी टाइम आउट कहां क्लॉज पर निर्भर करता है

  4. SQL सर्वर (T-SQL) में FORMAT () फ़ंक्शन कैसे काम करता है

  5. सही टी-एसक्यूएल क्वेरी खोजने में मदद चाहिए