我想从具有最大特定值的行中获取值(在此示例中,是最旧的成员)
Select * from members where age=max(age)
这会有用吗?
如果有超过1名同龄人年龄相同的会员会怎么样?
(我不必担心因为我使用auto_increment,但我只是好奇)
感谢。
答案 0 :(得分:3)
select *
from members
where age = (select max(age) as max_age from members);
如果有超过1个成员具有相同的最大年龄,您将获得多个结果。从中选择一个:
select *
from members
where age = (select max(age) as max_age from members);
limit 1
如果您偏好任意特定数据,则可以选择添加order by
。
答案 1 :(得分:2)
没有
你想要
Select * from Members
where Age = (Select Max(Age) from Members)
如果您提到自动增量,建议您在表格中查找最后插入的ID,那么
Select LAST_INSERT_ID()
答案 2 :(得分:2)
这不起作用,因为这是Invalid use of group function
,最好使用SELECT * FROM members ORDER BY age DESC LIMIT 1
答案 3 :(得分:1)
如果您使用 GROUP BY 和 @variable 来查找和存储最小值,则可以使用单个 SELECT 语句完成/ max值和过滤器与最后的 HAVING 匹配。
假设您有一个表成员且至少有两列: id 和年龄,那么您可以使用以下语句:< / p>
SELECT id, age, @max:= IF(@max > age, @max, age) FROM members GROUP BY id HAVING(age = @max);
或
SELECT id, age, @min:= IF(@min < age, @min, age) FROM members GROUP BY id HAVING(age = @min);
答案 4 :(得分:0)
这将只返回一行 - 即使多个成员具有相同的最大年龄:
SELECT *
FROM members
ORDER BY age DESC
LIMIT 1 ;
这(和@ podiluska的回答)将返回所有这些:
SELECT m.*
FROM members AS m
JOIN
( SELECT MAX(age) AS max_age
FROM members
) AS allm
ON allm.max_age = m.age ;
答案 5 :(得分:0)
还有一种更为人为的做法:
SELECT * FROM members m
WHERE NOT EXISTS (
SELECT 1 FROM members m2
WHERE m1.age < m2.age )
此查询可移植到大多数数据库,适用于自动增加PK以及具有相同年龄的多个人。另外,至少在SQL Server中,大多数时候都会比使用子查询的版本更快(特别是如果[members]的索引超过了列[age])。