![](/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.