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

प्रत्येक समूह की शीर्ष 1 पंक्ति प्राप्त करें

;WITH cte AS
(
   SELECT *,
         ROW_NUMBER() OVER (PARTITION BY DocumentID ORDER BY DateCreated DESC) AS rn
   FROM DocumentStatusLogs
)
SELECT *
FROM cte
WHERE rn = 1

यदि आप प्रति दिन 2 प्रविष्टियों की अपेक्षा करते हैं, तो यह मनमाने ढंग से एक को चुनेगी। एक दिन के लिए दोनों प्रविष्टियां प्राप्त करने के लिए, इसके बजाय DENSE_RANK का उपयोग करें

सामान्यीकृत या नहीं के लिए, यह निर्भर करता है कि आप चाहते हैं:

  • 2 स्थानों पर स्थिति बनाए रखें
  • स्थिति इतिहास सुरक्षित रखें
  • ...

जैसा कि यह खड़ा है, आप स्थिति इतिहास को संरक्षित करते हैं। यदि आप मूल तालिका में भी नवीनतम स्थिति चाहते हैं (जो कि सामान्यीकरण है) तो आपको माता-पिता में "स्थिति" बनाए रखने के लिए एक ट्रिगर की आवश्यकता होगी। या इस स्थिति इतिहास तालिका को छोड़ दें।



  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 सर्वर अपडेट ट्रिगर, केवल संशोधित फ़ील्ड प्राप्त करें

  3. SQL सभी NULLs को प्रतिस्थापित करता है

  4. शुरुआती लोगों के लिए SQL सर्वर 2016 में पूर्ण-पाठ खोज लागू करना

  5. SQL सर्वर में एक पहचान कॉलम का मूल बीज लौटाएं