[英]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.