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

प्रति समूह पहली पंक्ति का चयन

SELECT  a, b, c
FROM    (
        SELECT  *, ROW_NUMBER() OVER (PARTITION BY a ORDER BY b, c) rn
        FROM    mytable
        ) q
WHERE   rn = 1
ORDER BY
        a

या

SELECT  mi.*
FROM    (
        SELECT  DISTINCT  a
        FROM    mytable
        ) md
CROSS APPLY
        (
        SELECT  TOP 1 *
        FROM    mytable mi
        WHERE   mi.a = md.a
        ORDER BY
                b, c
        ) mi
ORDER BY
        a

(a, b, c) . पर एक कंपोजिट इंडेक्स बनाएं प्रश्नों के तेजी से काम करने के लिए।

कौन सा अधिक कुशल है यह आपके डेटा वितरण पर निर्भर करता है।

यदि आपके पास a . के कुछ विशिष्ट मान हैं लेकिन प्रत्येक a . में ढेर सारे रिकॉर्ड , दूसरी क्वेरी बेहतर होगी।

अनुक्रमित दृश्य बनाकर आप इसे और भी बेहतर बना सकते हैं:

CREATE VIEW v_mytable_da
WITH   SCHEMABINDING
AS
       SELECT  a, COUNT_BIG(*) cnt
       FROM    dbo.mytable
       GROUP BY
               a

GO

CREATE UNIQUE CLUSTERED INDEX
       pk_vmytableda_a
ON     v_mytable_da (a)

GO

SELECT  mi.*
FROM    v_mytable_da md
CROSS APPLY
        (
        SELECT  TOP 1 *
        FROM    mytable mi
        WHERE   mi.a = md.a
        ORDER BY
                b, c
        ) mi
ORDER BY
        a


  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 सर्वर SHOWPLAN_TEXT

  2. SQL सर्वर उच्च उपलब्धता:SQL सर्वर फ़ेलओवर क्लस्टर इंस्टेंस स्थापित करें भाग 2

  3. एक बच्चे के लिए सभी माता-पिता प्राप्त करें

  4. जांचें कि क्या तालिका को OBJECTPROPERTY () के साथ SQL सर्वर में किसी विदेशी कुंजी द्वारा संदर्भित किया गया है

  5. SQL सर्वर में "मान को डेटा प्रकार में कनवर्ट करते समय रूपांतरण विफल" को कैसे ठीक करें