【问题标题】:Select rows by max value of another row按另一行的最大值选择行
【发布时间】:2014-11-18 21:17:02
【问题描述】:

我正在使用 Access 中的 sql 执行此操作...

这可能以前已经回答过,但我不知道如何提出正确的问题,所以我找不到解决方案。

我有一个名为“表”的表:

 attr_1  attr_2  attr3
 1       A       10
 1       B       5
 2       C       3
 3       D       7
 3       E       8
 3       F       11

我想要按attr_1 分组的结果,其中attr3 具有最大值,并且同一行中的attr_2 也是。所以这就是我需要的结果:

 1      A       10
 2      C       3
 3      F       11

如果我不需要attr_2,那么我会知道如何使用 GROUP BY 和 MAX 来执行此操作,但我不知道如何在 sql 语句中包含此attr_2 以获得想要的结果。

请帮忙。

【问题讨论】:

    标签: sql ms-access group-by max


    【解决方案1】:

    您可以在subquery AND join 中获取最大值以获取所有值。

    SELECT attr_1, attr_2, attr3
    FROM (
      SELECT attr_1, max(attr3) as maxAttr3
      FROM Table1
      GROUP BY attr_1 )T
    JOIN Table1 T1
    on T.maxAttr3 = T1.attr3
    and T.attr_1 = T1.attr_1 
    

    【讨论】:

    • 非常感谢您的快速回复。这看起来不错,但我遇到了语法错误......我现在正试图找到原因
    • 它说:FROM 子句中的语法错误(我刚刚创建了与我在问题中描述的相同的表——例如——只是为了确保,但仍然是相同的错误)。我什至在属性名称中添加了相同的不一致:)
    • @Bezk -- 这个语法看起来没什么问题。确保使用正确的表名(此示例使用 Table1)...
    • 我快到了。第二个(内部)选择有效。似乎访问有一些反对将表命名为“表”:)。将报告我的进度...
    • 我让它工作了。我必须将第一行更改为“SELECT Table1.attr_1,attr_2,attr3”,并且必须添加“inner join”而不是“join”。这可能是一些不适用于其他数据库的 Access 东西......?此外,无论有没有最后一行“和 T.attr_1 = T1.attr_1”,它都给了我相同的结果??再次感谢您的努力,但 Gordon 的解决方案开箱即用,因此我不得不标记他的答案...
    【解决方案2】:

    您根本不需要group by。您只想选择最近的行。假设该值是唯一的,您可以这样做:

    select t.*
    from table as t
    where t.attr3 = (select max(t2.attr3) from table as t2 where t2.attr_1 = t.attr_1);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-06-23
      • 2021-10-04
      • 2013-08-15
      • 2023-01-06
      • 2017-06-29
      • 2016-03-06
      • 1970-01-01
      相关资源
      最近更新 更多