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

एसक्यूएल क्वेरी प्रति समूह आईडी केवल 1 रिकॉर्ड वापस करने के लिए

SELECT  t.*
FROM    (
        SELECT  DISTINCT groupid
        FROM    mytable
        ) mo
CROSS APPLY
        (
        SELECT  TOP 1 *
        FROM    mytable mi
        WHERE   mi.groupid = mo.groupid
        ORDER BY
                age DESC
        ) t

या यह:

SELECT  *
FROM    (
        SELECT  *, ROW_NUMBER() OVER (PARTITION BY groupid ORDER BY age DESC) rn
        FROM    mytable
        ) x
WHERE   x.rn = 1

यह संबंधों के मामले में भी प्रति समूह अधिकतम एक रिकॉर्ड लौटाएगा।

दोनों विधियों के प्रदर्शन की तुलना के लिए मेरे ब्लॉग में यह लेख देखें:



  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 सर्वर सेवा ब्रोकर के लिए .NET API

  4. एसक्यूएल:ओवर () में कहां क्लॉज का उपयोग करें?

  5. उदाहरण के लिए सभी अस्थायी तालिकाओं को छोड़ें