按行过滤分组
Posted
技术标签:
【中文标题】按行过滤分组【英文标题】:Group by like row filtering 【发布时间】:2010-10-11 01:56:39 【问题描述】:假设我有一个表格来描述汽车的品牌、型号、年份和其他一些列。
据此,我想获得最近一年的每个品牌和型号的一整行。
或者换一种说法。每行将具有唯一的品牌和型号组合,以及来自相应行的其他数据,其中年份最大值。
标准 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
);
【讨论】:
谢谢大家。我选择了这个解决方案。【参考方案2】:mysql 解决方案:
SELECT * FROM cars GROUP NY CONCAT(make, "-", model) ORDER BY year DESC;
【讨论】:
【参考方案3】:这应该适用于任何地方:
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 通常是保留字(函数名),转义保留字的方法因平台而异。要解决此问题,请将年份列重命名为 ModelYear。
【讨论】:
以上是关于按行过滤分组的主要内容,如果未能解决你的问题,请参考以下文章