如何为一组记录

时间:2016-04-08 10:48:00

标签: sql ms-access

假设我有下表:

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,因为这正是我实际使用的。

3 个答案:

答案 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
        );