不选择具有唯一键的重复记录

时间:2017-01-10 15:58:21

标签: sql oracle

样本表:

表电影:

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将不是一个选择。如果是重复,则标题和年份将与重复记录相同。基本上不需要选择具有唯一键的重复记录。最有效的方法是什么?

编辑:另一件事。请注意,可能存在空值,我不希望省略这些值。我更新了示例以显示此内容。

1 个答案:

答案 0 :(得分: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