我的表中有一些记录。
我想选择一条具有最大年龄的记录
如果我在下面写查询它工作正常。
Select MAX(Age)
From Table
它工作正常。但如果我这样写,
Select FirstName, LastName, MAX(Age)
From Table
Group By FirstName, LastName
它不工作(显示所有记录)。我怎样才能解决这个问题 ?
您可以使用子查询来获取最大值Age
并比较外部查询年龄的结果。
Select *
From TableName
WHERE Age = (SELECT MAX(Age) FROM TableName)
简要说明,GROUP BY
在您的查询中使用的并不完全符合您的要求,因为它不是过滤运算符并且只对非聚合列进行分组。例如,您有两个名字和姓氏相同但年龄不同的记录,结果将是年龄最大的人,因为使用MAX()
.
由于使用 max(Age) 您将获得单条记录,而 FirstName,LastName 有多条记录。
您正在一起使用它,因此它会产生歧义。
Select FirstName, LastName from From Table where Age = (SELECT MAX(Age) FROM Table)
使用此查询。
另一种方法是使用not exists
:
Select * from Table t1
where not exists (select 1 from Table where age > t1.age)
我会建议这种简单的方法:
select *
from table
order by age desc
fecth 1 rows only
请注意,这只会选择一条记录,而不是选择所有具有最长年龄的记录。