【问题标题】:Group by like row filtering按行过滤分组
【发布时间】:2010-10-11 01:56:39
【问题描述】:

假设我有一个表格来描述汽车的品牌、型号、年份和其他一些列。

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

或者换一种说法。每行将具有唯一的品牌和型号组合,以及来自相应行的其他数据,其中年份最大值。

标准 SQL 解决方案会很棒。

【问题讨论】:

    标签: sql group-by


    【解决方案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。

      【讨论】:

        猜你喜欢
        • 2022-08-02
        • 1970-01-01
        • 1970-01-01
        • 2020-07-31
        • 2020-09-01
        • 1970-01-01
        • 2018-06-21
        • 1970-01-01
        • 2016-04-20
        相关资源
        最近更新 更多