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

किसी अन्य कॉलम द्वारा अधिकतम कॉलम मान समूह वाली पंक्तियों का चयन करें

मैंने खुद इससे कई बार संघर्ष किया है और इसका समाधान यह है कि आप अपनी क्वेरी के बारे में अलग तरह से सोचें।

मैं प्रत्येक DocGroupViewID पंक्ति चाहता हूं जहां Del_Index उस DocGroupViewID के साथ सभी पंक्तियों के लिए उच्चतम (अधिकतम) है:

SELECT
    T.DocGroupViewID,
    T.Del_Index,
    T.ID
FROM MyTable T
WHERE T.Del_Index = (
    SELECT MAX( T1.Del_Index ) FROM MyTable T1
    WHERE T1.DocGroupViewID = T.DocGroupViewID 
)

यह तब और जटिल हो जाता है जब एक से अधिक पंक्तियों में समान Del_Index हो सकता है , तब से आपको यह चुनने का कोई तरीका चाहिए कि किसे दिखाना है।

संपादित करें:किसी अन्य विकल्प के साथ अनुवर्ती कार्रवाई करना चाहता था

आप RANK() . का उपयोग कर सकते हैं या ROW_NUMBER() परिणामों पर अधिक नियंत्रण पाने के लिए सीटीई के साथ कार्य करता है, जो निम्नानुसार है:

-- fake a source table
DECLARE @t TABLE (
    ID int IDENTITY(1,1) PRIMARY KEY,
    Del_Index int,
    DocGroupViewID int
)

INSERT INTO @t
SELECT 1, 1 UNION ALL
SELECT 2, 1 UNION ALL
SELECT 3, 1 UNION ALL
SELECT 1, 2 UNION ALL
SELECT 2, 2 UNION ALL
SELECT 2, 2 UNION ALL
SELECT 1, 3 UNION ALL
SELECT 2, 3 UNION ALL
SELECT 3, 3 UNION ALL
SELECT 4, 3

-- show our source
SELECT * FROM @t

-- select using RANK (can have duplicates)
;WITH cteRank AS
(
    SELECT
        DocGroupViewID,
        Del_Index,
        ID,
        RANK() OVER
            (PARTITION BY DocGroupViewID ORDER BY Del_Index DESC)
        AS RowRank,
        ROW_NUMBER() OVER
            (PARTITION BY DocGroupViewID ORDER BY Del_Index DESC)
        AS RowNumber
    FROM @t
)
SELECT *
FROM cteRank
WHERE RowRank = 1

-- select using ROW_NUMBER
;WITH cteRowNumber AS
(
    SELECT
        DocGroupViewID,
        Del_Index,
        ID,
        RANK() OVER
            (PARTITION BY DocGroupViewID ORDER BY Del_Index DESC)
        AS RowRank,
        ROW_NUMBER() OVER
            (PARTITION BY DocGroupViewID ORDER BY Del_Index DESC)
        AS RowNumber
    FROM @t
)
SELECT *
FROM cteRowNumber
WHERE RowNumber = 1

यदि आपके पास संबंधों को सुलझाने के तरीके हैं, तो बस इसे ORDER BY में जोड़ें ।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. उबंटू 16.04 में अपग्रेड किया गया अब MySQL-पायथन निर्भरताएं टूट गई हैं

  2. MySQL में विभाजन से अधिक रैंक कैसे करें

  3. कौन सा अधिक कुशल है:एकाधिक MySQL टेबल या एक बड़ी टेबल?

  4. Low_case_table_names=1 Ubuntu 18.04 पर mysql को प्रारंभ नहीं होने देता

  5. MySQL प्रश्नों में WHERE 1 का महत्व