SQL返回非重复记录

aus*_*aus 1 sql

我正在尝试构建一个将按以下方式排序的查询,NameYear使用更高年份过滤重复项并在表中返回这些记录.我的数据目前看起来像这样:

ID-----Name-----Year
1      Bob      2010
2      John     2014
3      Bob      2004
4      Eric     2005
Run Code Online (Sandbox Code Playgroud)

数据应该主要按顺序进行排序,Name然后按Year降序进行二次排序,如下所示:

ID-----Name-----Year
3      Bob      2004
1      Bob      2010
4      Eric     2005
2      John     2014
Run Code Online (Sandbox Code Playgroud)

然后重复Name记录应该过滤只返回最低值,Year如下所示:

ID-----Name-----Year
3      Bob      2004
4      Eric     2005
2      John     2014
Run Code Online (Sandbox Code Playgroud)

我尝试了类似的东西SELECT DISTINCT,HAVING COUNT但我似乎无法得到它.可能缺少一些简单的东西.有帮助吗?

Red*_*ter 5

select ID, Name, Year
from (
    select ID, Name, Year, Rank() over (partition by Name order by year) as Rank
    from MyTable
) t
where Rank = 1
Run Code Online (Sandbox Code Playgroud)

SQL FIddle示例#1

如果你不能使用PARTITION,你可以这样做:

select m.ID, m.Name, m.Year
from (
    select Name, min(Year) as MinYear
    from MyTable
    group by Name
) mm
inner join MyTable m on mm.Name = m.Name and mm.MinYear = m.Year
Run Code Online (Sandbox Code Playgroud)

SQL小提琴示例#2