Mysql where子句中的MAX函数

Mysql where子句中的MAX函数,mysql,sql,max,greatest-n-per-group,Mysql,Sql,Max,Greatest N Per Group,如何在mysql查询的where子句中使用max()函数,我正在尝试: select firstName,Lastname,MAX(id) as max where id=max; 这给了我一个错误: Unknown column 'max' in 'where clause' 有什么帮助吗?提前感谢。您正在使用word“max”作为专栏的别名。尝试: MAX(id) as mymax ... WHERE ID - mymax 使用子选择: SELECT row FROM table

如何在mysql查询的where子句中使用max()函数,我正在尝试:

 select firstName,Lastname,MAX(id) as max where id=max;
这给了我一个错误:

Unknown column 'max' in 'where clause'

有什么帮助吗?提前感谢。

您正在使用word“max”作为专栏的别名。尝试:

MAX(id) as mymax ... WHERE ID - mymax
使用子选择:

SELECT row  FROM table  WHERE id=(
    SELECT max(id) FROM table
)

注意:ID必须唯一,否则返回多行

您使用的语法不正确。查询应该类似于:

SELECT column_name(s) FROM tablename WHERE id = (SELECT MAX(id) FROM tablename)

我们不能在同一个
SELECT
WHERE
子句中引用聚合函数的结果(例如
MAX()

解决这类问题的标准模式是使用内联视图,如下所示:

SELECT t.firstName
     , t.Lastname
     , t.id
  FROM mytable t
  JOIN ( SELECT MAX(mx.id) AS max_id
           FROM mytable mx
       ) m
    ON m.max_id = t.id
这只是获得指定结果的一种方法。还有其他几种方法可以获得相同的结果,其中一些方法的效率可能比其他方法低得多。其他答案证明了这种方法:

 WHERE t.id = (SELECT MAX(id) FROM ... )
有时,最简单的方法是使用带有限制的ORDER BY。(请注意,此语法特定于MySQL)

注意,这将只返回一行;因此,如果有多行具有相同的id值,则不会返回所有行。(第一个查询将返回具有相同id值的所有行。)

这种方法可以扩展到获取多行,通过将其更改为
LIMIT 5
,可以获取id值最高的五行


请注意,此方法的性能尤其取决于可用的适当索引(即,
id
作为主键或另一个索引中的前导列)合适的索引将使用所有这些方法提高查询的性能。

是否希望使用id最大的行的名字和姓氏

如果是这样(并且您缺少FROM条款):


某些Mysql版本不允许在子选择中使用“限制”。 我对你(以及我将来)的回答是使用分组

select firstName,Lastname,id 
where {whatever}
group by id
having max(id)

这允许您在选择区域中返回所需的任何内容,而无需聚合字段。

此查询将返回所需的数据。 用您正在使用的表名替换foo

SQL查询:

select firstName,Lastname, id 
from foo 
having max(id) = id 

-1不能在WHERE子句中引用列别名,也不能在WHERE子句中引用聚合函数的结果。此答案完全错误。此答案中的第一句是正确的,即
max
用作选择列表中表达式的别名。但根据这一观察,答案毫无意义。首先,
MAX
不是保留字Ref:。使用不同的别名有什么意义?这并不能解决问题。你应该接受斯宾塞7593给出的问题答案。这个问题还有待解决吗?没有人接受答案。如果没有一个答案是令人满意的,那么也许这个问题应该作为另一个有公认答案的问题的副本来结束。如果我在一个月或六个月前看到这个问题就好了。简单有效。爱死它了!如果使用group by和having对所有内容进行排序,我们应该在其中输入什么?记住,
having
子句过滤临时结果集
SELECT firstName, Lastname, MAX(id) as max WHERE YOUR_CONDITIONS_HERE HAVING id=max(id) 
select firstName,Lastname,id 
where {whatever}
group by id
having max(id)
select firstName,Lastname, id 
from foo 
having max(id) = id