我正在尝试构建一个将按以下方式排序的查询,Name并Year使用更高年份过滤重复项并在表中返回这些记录.我的数据目前看起来像这样:
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但我似乎无法得到它.可能缺少一些简单的东西.有帮助吗?
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)
如果你不能使用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)