2009-03-03 15 views
1

Sagen wir, ich habe eine Tabelle, die Autos mit Marke, Modell, Jahr und einigen anderen Spalten beschreibt.Gruppe nach like Zeilenfilterung

Von diesem würde ich gerne eine volle Reihe von jeder Marke und Modell für das letzte Jahr bekommen.

Oder um es anders auszudrücken. Jede Zeile hätte eine eindeutige Kombination aus Marke und Modell mit anderen Daten aus der entsprechenden Zeile mit dem größten Wert des Jahres.

Standard-SQL-Lösung wäre großartig.

Antwort

1
select t1.make, t1.model, t1.year, t1.other_cols 
from table t1 
where year = (select max(year) from table t2 
       where t2.make = t1.make 
       and t2.model = t1.model 
      ); 
+0

Danke euch allen. Ich ging mit dieser Lösung. – Bloodboiler

1

MySQL Lösung:

SELECT * FROM cars GROUP NY CONCAT(make, "-", model) ORDER BY year DESC; 
1

Dies sollte die meisten überall arbeiten:

SELECT c1.* 
FROM cars c1 
INNER JOIN 
    (
    SELECT Make, Model, Max(Year) AS Year 
    FROM cars 
    GROUP BY Make, Model 
) c2 ON c1.Make=c2.Make AND c1.Model=c2.Model, c1.Year=c2.Year 

Der Haupt Nachteil ist, dass Jahr ist oft ein reserviertes Wort (Funktionsname) und die Mittel für die Flucht reservierte Wörter variieren je nach Plattform. Um das Problem zu beheben, benennen Sie die Spalte "year" in "ModelYear" um.