假设我有下表:
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,因为这正是我实际使用的。
答案 0 :(得分:1)
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
注意:如果出现平局,这将为每个家庭提供多条记录。
答案 1 :(得分:1)
简单回答,做一个相关的子选择以获得"当前"家庭最高年龄:
select *
from tablename t1
where t1.Age = (select max(t2.Age) from tablename t2
where t2.Last_Name = t1.Last_Name)
但是,Tim Biegeleisen的查询可能要快一些。
答案 2 :(得分:0)
我倾向于在这种情况下使用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
);