1

NameおよびでソートしYear、年数の高い重複をフィルタリングし、それらのレコードをテーブルに返すクエリを作成しようとしています。私のデータは現在次のようになっています。

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たが、取得できないようです。おそらく単純なものが欠けています。何か助けはありますか?

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 フィドルの例 #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 に答える