按行过滤分组

时间:2009-03-03 17:50:16

标签: sql group-by

假设我有一张描述汽车的表格,包括品牌,型号,年份以及其他一些栏目。

由此,我想获得最新一年的每个品牌和型号的一整行。

或以另一种方式表达。每一行都具有品牌和型号的独特组合,以及来自相应行的其他数据,具有最大的年份值。

标准SQL解决方案会很棒。

3 个答案:

答案 0 :(得分:1)

MySQL解决方案:

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

答案 1 :(得分: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
             );

答案 2 :(得分: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

主要的警告是,Year通常是一个保留字(函数名),并且用于转义保留字的方法因platorm而异。要解决此问题,请将year列重命名为ModelYear。