![](/img/trans.png)
[英]SQL question: how to select arbitrary numbers of records in each record group?
[英]How do I select the record with the largets X for each of a group of records
假设我有下表:
First_Name Last_Name Age
John Smith 50
Jane Smith 40
Bill Smith 12
Freda Jones 30
Fred Jones 35
David Williams 50
Sally Williams 20
Peter Williams 35
如何设计一个查询,让我知道每个家庭中年龄最大的名字,姓氏和年龄? 一定有可能,但这让我发疯。
我正在寻找一种通用的SQL解决方案,尽管我已将ms-access标记为,因为这是我实际使用的方法。
SELECT t1.First_Name, t1.Last_Name, t1.Age
FROM family t1
INNER JOIN
(
SELECT Last_Name, MAX(Age) AS maxAge
FROM family
GROUP BY Last_Name
) t2
ON t1.Last_Name = t2.Last_Name AND t1.Age = t2.maxAge
注意:如果发生平局,这将为每个家庭提供多个记录。
简单的答案,做一个相关的子选择以获得“当前”家庭的最高年龄:
select *
from tablename t1
where t1.Age = (select max(t2.Age) from tablename t2
where t2.Last_Name = t1.Last_Name)
但是,Tim Biegeleisen的查询可能要快一些。
我倾向于在这种情况下使用NOT EXISTS
,因为许多DBMS在这种情况下都可以使用反半联接,这可以导致更好的性能:
SELECT *
FROM Table AS t
WHERE NOT EXISTS
( SELECT 1
FROM Table AS t2
WHERE t2.Last_Name = t.Last_Name
AND t2.Age > t.Age
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.