【问题标题】:SQL - Limit results on groupsSQL - 限制组的结果
【发布时间】:2011-06-23 15:21:56
【问题描述】:

我有下表:

Car      | color    | year
---------+----------+------
mercedes | blue     | 1991
mercedes | yellow   | 1993
mercedes | blue     | 1996
mercedes | red      | 1998
renaud   | blue     | 1991
renaud   | yellow   | 1993
renaud   | blue     | 1996
renaud   | red      | 1998

我正在寻找一个查询,该查询允许检索每种汽车类型的最早年份行。 在这种情况下,它应该给我:

Car       | color | year
----------+-------+------
mercedes  | blue  | 1991
renaud    | blue  | 1991

我尝试过 ORDER BY + LIMIT, HAVING, GROUP BY.... 但它总是添加我不需要的额外行(我必须遍历结果集以创建子结果)。

你知道我该怎么做吗?

非常感谢您的有用提示!

克洛德

【问题讨论】:

  • 1991 年的蓝色梅赛德斯比 1996 年的蓝色梅赛德斯更“新”吗?我不了解您尝试对结果进行分组的方式...
  • 同意 - 示例不正确...
  • 您的意思是“最旧的”而不是“最近的”吗?如果两辆颜色不同的汽车都来自同样较新(或较旧或任何标准),结果应该是什么?
  • 抱歉英语不好,实际上我的意思是最古老的......

标签: sql syntax group-by sql-order-by having


【解决方案1】:

嵌套选择 - 像这样:

select car, max(year) yr
from mytable
group by car

这给出了每辆车的正确年份。那么你想添加一种颜色(没有指定如果那辆车在那一年有不止一个怎么办......)

select a.car, a.color, a.yr
from (
select car, max(year) yr
from mytable
group by car
) a
, mytable
where mytable.car = a.car
and mytable.year = a.yr

【讨论】:

    【解决方案2】:

    从 table_name 中选择汽车、颜色、Max(Year) 按车组,颜色

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-13
      • 1970-01-01
      • 1970-01-01
      • 2011-03-08
      相关资源
      最近更新 更多