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

标签 sql oracle

示例表:

table 上电影:

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、标题和年份,其中标题和年份不重复。注意如果重复,标题和年份将始终相同,因此例如《 bat 侠 2014》就不是一个选择。如果是重复的,标题和年份都将与重复记录相同。基本上不需要选择具有唯一键的重复记录。最有效的方法是什么?

编辑:另一件事。请注意,可能存在空值,我不希望省略这些值。我更新了示例来展示这一点。

最佳答案

使用 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

关于sql - 不选择具有唯一键的重复记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41573016/

相关文章:

sql - 在哪里可以找到 Avaloq Banking Suite 表中头寸的当前值?

sql - mysql:搜索存储为 varchar 的 BETWEEN 日期

oracle - ORA-01747:无效的user.table.column,table.column或列规范

ORACLE PL/SQL : Functions and Optional Parameters, 如何?

mysql - 将数据从我的数据库传输到我 friend 的数据库

sql - UPDATE 语句中的集合 COUNT、FIRST 和 LAST

sql - SELECT DISTINCT 或 SELECT IN 子句的效率

sql - 如何在SQL中查找不匹配记录的列表? (遇到一些麻烦)

java - 将查询插入到 oracle 数据库中

oracle - Oracle表审计添加日期和修改日期