假设我从SQL查询中获得了以下数据:
Lastname Firstname Age
Anderson Jane 28
Anderson Lisa 22
Anderson Jack 37
如果我想知道最后一个姓Anderson的人的年龄,我可以选择MAX(年龄)和GROUP BY姓氏。但我也想知道那个最老的人的名字。当GROUP BY将Firstname值折叠成一行时,我如何确保从我获得最大年龄的同一行中获取Firstname值?
答案 0 :(得分:3)
对于那些支持它的RDBMS(例如,SQL Server 2005+),您可以使用窗口函数:
select t.Lastname, t.Firstname, t.Age
from (select Lastname, Firstname, Age,
row_number() over (partition by Lastname order by Age desc) as RowNum
from YourTable
) t
where t.RowNum = 1
对于其他人,您需要在Lastname上使用子查询,并在连接中获取Firstname:
select yt.Lastname, yt.Firstname, yt.Age
from YourTable yt
inner join (select LastName, max(Age) as MaxAge
from YourTable
group by LastName) q
on yt.Lastname = q.Lastname
and yt.Age = q.MaxAge
答案 1 :(得分:2)
您必须从分组结果中重新加入表格 - 即创建一个视图或嵌套查询以包含该组。
答案 2 :(得分:0)
对于任何方法,您需要注意的主要事项是,对于给定的firstname
,可能存在超过1 lastname
且年龄相同。
此查询只返回1行,但如果您的数据集中有多个37岁的“Anderson”,则可以返回任一个:
select firstname, age
from yourtable
where lastname = 'Anderson'
order by age desc limit 1