簡體   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