2013-04-04 4 views
5

मैं निम्न डेटा जो मैं फ़िल्टर करना चाहते हैं तो मैं केवल पहला स्तंभ का समूह के आधार पर केवल एक पंक्ति हो और अधिकतम तिथि का चयन करेंस्तंभ द्वारा समूहित करके और अधिकतम तिथि तक एकल पंक्ति का चयन कैसे करें?

CO2 अनन्य मानों

col1 | col2 | date 

1 | 123 | 2013 
1 | 124 | 2012 
1 | 125 | 2014 
2 | 213 | 2011 
2 | 214 | 2015 
2 | 215 | 2018 

तो शामिल है परिणाम मैं चाहता हूँ कर रहे हैं:

1 | 125 | 2014 
2 | 215 | 2018 

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

select t.* 
from (select t.*, 
      row_number() over (partition by col1, col2 order by date desc) as seqnum 
     from t 
    ) t 
where seqnum = 1 

उत्तर

3

बदलें col1 से केवल विभाजन के लिए row_number() में विभाजन लेकिन date desc द्वारा आदेश रखें:

select col1, col2, date 
from 
(
    select col1, col2, date, 
    row_number() over (partition by col1 
         order by date desc) as rn 
    from yourtable 
) x 
where rn = 1 

SQL Fiddle with Demo देखें।

तुम दोनों col1 द्वारा विभाजन कर रहे थे और col2 आप प्रत्येक पंक्ति के लिए अद्वितीय मान रहे थे के बाद से। तो यह अधिकतम तारीख के साथ पंक्ति वापस नहीं करेगा।

+0

जाएगा [टैग: ओरेकल] में इस काम करता है? – Kermit

+1

@FreshPrinceOfSO हाँ – Taryn

+0

[ठीक है] [http://cf.chucklesnetwork.agj.co/items/1/4/0/4/i-dont-always-upvote_but-when-i-do-i-have- to-t.jpg) – Kermit

0

मैं एक बराबर का उपयोग कर अधिकतम है bluefeet पसंद करते हैं की विधि, लेकिन यहाँ:

SELECT t.col1, t.col2, t.date 
FROM yourtable t 
    JOIN (
     SELECT col1, MAX(date) maxDate 
     FROM yourtable 
     GROUP BY col1 
    ) t2 on t.col1 = t2.col1 AND t.date = t2.maxDate 

SQL Fiddle Demo (अन्य पोस्ट से उधार)

0
Select * from yourtable where date in 
(select max(date) from tab group by col1); 
संबंधित मुद्दे