首页 > 解决方案 > Oracle SQL 删除 4 个字段中 2 个的重复项

问题描述

我正在使用 Oracle SQL 来提取数据;

我有 2 个系统中的 ID 的供应期。我有这个使用下面的代码:

select distinct b.ID_Code, b.supply_start_date, b.supply_end_date, b.system_id
from (
 select ID_Code, max(supply_start_date) as max_dt 
 from tmp_mmt_sup 
 group by ID_Code) a
inner join tmp_mmt_sup b
on a.ID_Code=b.ID_Code and a.max_dt=b.SUPPLY_START_DATE;

但是,我有几条记录在 2 个不同的系统上,但开始日期/结束日期相同。我只想保留其中一个 - 不打扰哪个!

所以而不是

ID_Code    Start        End          System
123        01-04-2018   30-04-2018   ABC
123        01-04-2018   30-04-2018   DEF

我只有这些记录之一。

非常感谢 D

标签: sqloracleduplicates

解决方案


如果您不关心返回哪一个,那么聚合函数之一(例如MINor MAX)就可以完成这项工作。例如:

select b.id_code, 
       b.supply_start_date, 
       b.supply_end_date, 
       max(b.system_id) system_id    --> added MAX here ...
from (select id_code, 
             max(supply_start_date) as max_dt 
      from tmp_mmt_sup 
      group by id_code
     ) a
inner join tmp_mmt_sup b 
  on a.id_code = b.id_code and a.max_dt = b.supply_start_date
group by b.id_code,                  --> ... and GROUP BY here
         b.supply_start_date, 
         b.supply_end_date;   

推荐阅读