2017-01-10 63 views
2

樣品表中重複記錄:不選擇具有獨特的鍵

表電影:

Title | Year | Price | Genre | ID 
Batman 2016 12  Comic 1 
Avengers 2014 7  Comic 2 
Batman 2016 7  Comic 3 
Fast 5 2012 7  Car 4 
Superman      5 
Star Wars      6 

所需的結果:

Title | Year | ID 
Batman 2016 1 
Avengers 2014 2 
Fast 5 2012 4 
Superman   5 
Star Wars  6 

所以我需要選擇不同的ID,標題和年份,其中標題和Year不重複。注意標題和年份總是相同,如果它是重複的,例如蝙蝠俠2014年不會是一個選擇。如果是重複的,則標題和年份將與重複記錄相同。基本上不需要選擇具有唯一鍵的重複記錄。什麼是最有效的方法來做到這一點?

編輯:另一件事。請注意,可能存在空值,我不希望這些值被省略。我更新了示例以顯示此內容。

+2

提示:'GROUP BY'。 –

+0

如何判斷在重複的情況下顯示哪個「ID」?對於'蝙蝠俠'你有兩行,你想'ID = 1',爲什麼? – Aleksej

+0

好問題。沒關係。我們想要一個ID,但它可以是任何一個,這並不重要。 – DanH

回答

2

另一個

with CTE as 
(
select a1.*, row_number() over (partition by Title, Year order by ID) as r_ord 
from Movies a1 
) 
select CTE.* 
from CTE 
where r_ord =1 

或使用ROW_NUMBER,分區由不同的領域和秩序,如果你只是想標題,年份和ID:

select Title, Year, min(ID) 
from movies 
group by Title, Year