繁体   English   中英

如何根据oracle sql中的某些条件删除重复记录?

[英]How to remove duplicates records based on some condition in oracle sql?

我通过使用多个连接获得了这个表

E_name  s_date      year  h_value  l_value  update_date
  a    01-08-2012   2012    25      70       01-01-2012
  a    23-06-2012   2010    20      55       01-01-2009
  a    19-03-2020   2020   210      540      29-04-2020
  a    14-02-2020   2020    78      765      29-04-2020
  b    27-12-2018   2018    14      29       31-01-2019
  b    19-12-2018   2018    17      30       19-12-2018

我想根据 E_name 和年份删除重复项。
如果下一条记录的 E_name 和年份与前一条相同,则

  1. 将考虑具有最新 update_date 的行
  2. 如果两个 update_date 相同,则将考虑具有最新 s_date 的行

所需输出

E_name  s_date      year  h_value  l_value  update_date
  a    01-08-2012   2012    25      70       01-01-2012
  a    23-06-2012   2010    20      55       01-01-2009
  a    19-03-2020   2020   210      540      29-04-2020
  b    27-12-2018   2018    14      29       31-01-2019

您需要一个 group by 和一个 row_number() 顶部

 Select * from 
( Select  e_name,"year", 
           maxdate,update_date,
         row_number() over (partition by e_name,"year" order by 
         update_date desc) as rn 
          from 
          ( Select e_name,"year", 
           update_date,max(s_date) as maxdate from 
          sample 
         group by 
        e_name,"year",update_date
        ) 
 )
        where rn =1 

检查这个输出链接小提琴: http ://sqlfiddle.com/#!4/ c1646/23

像下面这样的查询可能会起作用。 将您的定向数据放入Temp Table并在您的Temp Table上应用以下查询

with MyCTE
as
(
  select
  E_Name
  ,S_Date
  ,year
  ,H_value
  ,L_value
  ,update_date
  , RANK() over (partition by E_Name,year order by update_date desc,S_DATE desc) as ranking
  from TempTable
 )
 select * from MyCTE where ranking=1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM