1

我正在尝试构建一个查询,该查询将按 and 排序NameYear过滤具有较高年份的重复项并将这些记录返回到表中。我的数据目前如下所示:

ID-----Name-----Year
1      Bob      2010
2      John     2014
3      Bob      2004
4      Eric     2005

数据应该首先按降序排序,Name然后按Year降序排序,如下所示:

ID-----Name-----Year
3      Bob      2004
1      Bob      2010
4      Eric     2005
2      John     2014

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

ID-----Name-----Year
3      Bob      2004
4      Eric     2005
2      John     2014

我已经尝试过类似的东西SELECT DISTINCTHAVING COUNT但我似乎无法得到它。可能缺少一些简单的东西。有什么帮助吗?

4

3 回答 3

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

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

SQL 小提琴示例 #2

于 2012-07-18T19:29:46.643 回答
1
SELECT Name, MIN(Year) FROM table
GROUP BY Name
ORDER BY Name ASC
于 2012-07-18T19:30:59.113 回答
0

假设 MySQL

select min(id), name, min(year)
from (
select distinct t1.id, t1.name, t2.year
from tbl t1, tbl t2
odrer by t1.name, t2.year
) T
group by name 
于 2012-07-18T19:35:42.133 回答