一尘不染

我可以对分组依据使用非聚合列吗?

mysql

您不能(不应该)将非聚合放在查询SELECT行中GROUP BY

但是,我想访问与最大关联的非聚合之一。用简单的英语来说,我想要一个带有每种类型的最早ID的表。

CREATE TABLE stuff (
   id int,
   kind int,
   age int
);

该查询为我提供了我所需要的信息:

SELECT kind, MAX(age)
FROM stuff
GROUP BY kind;

但这不是最有用的形式。我真的想要id与每一行相关联,以便可以在以后的查询中使用它。

我正在寻找这样的东西:

SELECT id, kind, MAX(age)
FROM stuff
GROUP BY kind;

输出如下:

SELECT stuff.*
FROM
   stuff,
   ( SELECT kind, MAX(age)
     FROM stuff
     GROUP BY kind) maxes
WHERE
   stuff.kind = maxes.kind AND
   stuff.age = maxes.age

似乎确实应该有一种无需加入即可获取此信息的方法。我只需要SQL引擎在计算最大值时记住其他列。


阅读 270

收藏
2020-05-17

共1个答案

一尘不染

您无法获取MAX找到的行的ID,因为可能不会只有一个ID具有最长使用期限。

2020-05-17