2013-01-10 32 views
28

का अधिकतम समूह है, मैं एक तालिका (आईडी और राज्य) में दो कॉलम चुनने का प्रयास कर रहा हूं। तालिका को प्रत्येक आईडी के लिए अधिकतम मूल्य के साथ राज्य दिखाना चाहिए। मैंने कुछ अन्य उदाहरणों की कोशिश की है लेकिन कुछ भी काम नहीं करता है।कॉलम मान का चयन करें जहां अन्य कॉलम समूह

मूल डेटा संरचना:

ID state value (FLOAT) 
1 TX 921,294,481 
1 SC 21,417,296 
1 FL 1,378,132,290 
1 AL 132,556,895 
1 NC 288,176 
1 GA 1,270,986,631 
2 FL 551,374,452 
2 LA 236,645,530 
2 MS 2,524,536,050 
2 AL 4,128,682,333 
2 FL 1,503,991,028 

परिणामी डेटा संरचना इसलिए इस तरह दिखना चाहिए:

ID STATE (Max Value) 
1 FL 
2 AL 

फ्लोरिडा और अलबामा उनके आईडी समूहों में सबसे बड़ा मान रही है।

इस पर किसी भी मदद की सराहना की जाएगी। मुझे पहले से ही एक उत्तर उत्तर here मिला, लेकिन उत्तर मेरे लिए काम नहीं कर सका।

+0

देखते हैं? क्या 'मूल्य' एक 'वर्कर' है? –

+0

मूल्य अल्पविराम सीमित हैं? –

उत्तर

34

एसक्यूएल सर्वर (और विंडोड कार्यों के साथ अन्य उत्पादों) के लिए:

SELECT * 
FROM 
(
    SELECT 
    *, 
    ROW_NUMBER() OVER (PARTITION BY ID ORDER BY value desc) as rn 
    FROM 
    UnnamedTable 
) t 
WHERE 
    t.rn = 1 
+0

धन्यवाद सर। जैको से यहां अन्य समाधान भी काम करते हैं और यह एक अच्छा जवाब है। –

6

एक समाधान, इस धारणा है कि value संख्यात्मक है के आधार पर:

SELECT 
    [ID], 
    [State], 
    [Value] 
FROM 
(
    SELECT 
    [ID], 
    [State], 
    [Value], 
    Rank() OVER (PARTITION BY [ID] ORDER BY [Value] DESC) AS [Rank] 
    FROM [t1] 
) AS [sub] 
WHERE [sub].[Rank] = 1 
ORDER BY 
    [ID] ASC, 
    [State] ASC 

कई तो State एक ही ID साथ रों एक ही Value है, वे सभी एक ही Rank प्राप्त करेंगे। यह Row_Number का उपयोग करने से अलग है, जो अद्वितीय पंक्ति संख्याएं लौटाता है, लेकिन आदेश मनमाने ढंग से चुना जाता है। (यह भी देखें: SQL RANK() versus ROW_NUMBER())

5

आप इस परिणाम पाने के लिए एक सबक्वेरी उपयोग कर सकते हैं:

select t1.id, t1.[state] MaxValue 
from yourtable t1 
inner join 
(
    select id, max(value) MaxVal 
    from yourtable 
    group by id 
) t2 
    on t1.id = t2.id 
    and t1.value = t2.maxval 
order by t1.id 

तो तुम भी कौन-सा संस्करण उपयोग कर रहे हैं `एसक्यूएल-Server`, यदि हां, SQL Fiddle with Demo