繁体   English   中英

Oracle SQL 基于开始和结束日期的数据迁移

[英]Oracle SQL data migration based on start and end date

致力于将旧系统数据迁移到新系统。

我需要根据 id 和 name 对数据进行分组。 我们需要将开始日期作为最小日期,将结束日期作为最大日期。 如果任何 id 和 name 组合包含属于同一时期。 我们可以避免重复并选择从最低到最高的日期。

遗留系统

在此处输入图像描述

新系统预期

在此处输入图像描述

ID - 139247 包含基于名称的重复行。

在 - https://dbfiddle.uk/?rdbms=oracle_18&fiddle=8d6877847c5e052adf703430b5c7f083中添加数据

如果需要更多详细信息,请告诉我。 提前致谢。

这是一种差距和孤岛问题。 因为您想要任何重叠,所以我会 go 获得前一个enddate的累积最大值,以确定岛屿的位置:

select id, name, min(startdate) as startdate,
       (case when count(enddate) = count(*) then max(enddate)
        end) as enddate
from (select t.*,
             sum(case when prev_enddate >= startdate then 0 else 1 end) over (partition by id, name) as grp
      from (select t.*,
                   max(enddate) over (partition by id, name order by startdate range between unbounded preceding and interval '1' day preceding) as prev_enddate
            from t
           ) t
      ) t
group by id, name, grp
order by name, startdate;

是一个 db<>fiddle。

暂无
暂无

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

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