2013-04-04 14 views
5

Ich habe folgende Daten, die Ich mag würde ich nur nur eine Zeile filtern, so auf der Grundlage der Gruppierung der ersten Spalte und wählen Sie das max DatumWie wird eine einzelne Zeile bei der Gruppierung nach Spalte und nach dem maximalen Datum ausgewählt?

co2 eindeutige Werte enthält

col1 | col2 | date 

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

so die Ergebnisse ich möchte sind:

1 | 125 | 2014 
2 | 215 | 2018 

ich habe ein paar Beispiele versucht, mit dem ich hier (wie unten) als auch andere Gruppe von/verschieden/max (Datum), aber ohne Glück

Antwort

3

Ändern Sie die Partition in der row_number() nur Partition von col1 aber halten den Auftrag durch 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 

Siehe SQL Fiddle with Demo.

Da Sie sowohl von col1 als auch col2 partitioniert wurden, erhielten Sie für jede Zeile eindeutige Werte. Es würde also die Zeile mit dem maximalen Datum nicht zurückgeben.

+0

Werde diese Arbeit in [tag: Orakel]? – Kermit

+1

@FreshPrinceOfSO ja – Taryn

+0

[Na dann] (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

Ich ziehe Methode bluefeet, aber hier ist ein äquivalenter mit MAX:

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 (aus anderer Post entlehnt)

0
Select * from yourtable where date in 
(select max(date) from tab group by col1); 
Verwandte Themen