2009-03-03 12 views
1

私は、モデル、モデル、年、および他のいくつかの列を持つ車を記述する表を持っているとします。類似行フィルタリングによるグループ化

これからは、最新の1年ごとに各メイクとモデルを1行ずつ取りたいと思います。

または別の方法で入力してください。各行は、makeとモデルとの一意の組み合わせを、対応する行からの最大値の別のデータと組み合わせて使用​​します。

標準のSQLソリューションは素晴らしいでしょう。

答えて

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

ありがとうございます。私はこの解決策をとった。 – Bloodboiler

1

MySQLのソリューション:

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

これは最もどこでも動作するはずです:

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 

主な注意点は、今年は、多くの場合、予約語(関数名)と脱出するための手段であるということです予約語はplatormによって異なるこれを修正するには、年の列の名前をModelYearに変更します。

関連する問題