繁体   English   中英

如何为一组记录中的每个记录选择带有大号X的记录

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM