2017-01-10 6 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, название и год где титул и Год не дублируются. Примечание. Название и год всегда будут одинаковыми, если это дубликат, так что, например, Batman 2014 не будет выбора. Если бы это был дубликат, то и название, и год были бы такими же, как и дублирующаяся запись. В принципе не нужно выбирать дубликаты записей с уникальными ключами. Каков наиболее эффективный способ сделать это?

Редактировать: еще одна вещь. Имейте в виду, что могут присутствовать нулевые значения, и я не хочу, чтобы они были опущены. Я обновил этот пример, чтобы показать это.

+2

Подсказка: 'GROUP BY'. –

+0

Как вы определяете, какой идентификатор должен отображаться в случае дубликатов? Для 'Batman' у вас есть две строки, и вы хотите' ID = 1', почему? – Aleksej

+0

Хороший вопрос. Это не имеет значения. Мы хотим идентификатор, но это может быть любой из них, это не имеет значения. – DanH

ответ

2

Используйте row_number, раздел со стороны различных полей и порядка другим

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 

или, если вы хотите только название, год и ID:

select Title, Year, min(ID) 
from movies 
group by Title, Year 
Смежные вопросы