返回非重复记录的SQL
问题描述:
我在尝试构建一个查询,它将按Name
和Year
排序,筛选出年份较高的重复项并将这些记录返回到表中。我的数据目前看起来是这样的:返回非重复记录的SQL
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 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
如果您不能使用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
+0
谢谢。这是我需要的! – aus 2012-07-18 19:50:04
答
假设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
您使用的是哪个数据库? – RedFilter 2012-07-18 19:32:36
您的第一个数据示例与您的第二个数据不符。 – RedFilter 2012-07-18 19:40:01
谢谢,我修好了。 – aus 2012-07-18 20:08:37