嗨,我有以下 2 张桌子
表历史
version, from_date to_date ID Place
1 1900-01-01 00:00:00 2020-07-08 10:00:49 123 Delhi
2 2020-07-08 10:00:49 2199-12-31 23:59:59 123 hyderabad
table_current
version from_date to_date ID Place
1 1900-01-01 00:00:00 2020-10-07 18:03:56 123 Chennai
2 2020-10-07 18:03:56 2020-10-09 12:28:30 123 Kolkata
3 2020-10-09 12:28:30 2199-12-31 23:59:59 123 mumbai
table_history 由一些 etl 进程 (Datastage) 加载 table_current 由不同的 etl 进程 (informatica) 加载
Datastage 即将关闭,应使用 Informatica 继续加载数据
我需要合并上述表格(table_history 已经是 prod),以使日期范围列在历史记录和当前表格之间与版本号对齐,如下所示
联合视图(预期)
版本 from_date to_date ID 地点
1 1900-01-01 00:00:00 2020-07-08 10:00:49 123 Delhi
2 2020-07-08 10:00:49 2020-10-07 18:03:56 123 hyderabad
3 2020-10-07 18:03:56 2020-10-07 18:03:56 123 Chennai
4 2020-10-07 18:03:56 2020-10-09 12:28:30 123 Kolkata
5 2020-10-09 12:28:30 2199-12-31 23:59:59 123 mumbai
帮助表示赞赏
注意:from_date 和 to_date 是由 ETL 过程驱动的 - 不是来自源代码
我正在尝试使用 Windows 功能,但没有得到想要的结果
lag(sysdate) over (partition by id order by sysdate asc) is null
then TIMEZONE('GMT', to_timestamp('1900-01-01 00:00:00', 'yyyy-mm-dd')) else sysdate
end as from_date
, nvl(lead(sysdate) over (partition by id order by stg_load_dttm asc), TIMEZONE('GMT', to_timestamp('2199-12-31 23:59:59', 'yyyy-mm-dd HH24:MI:SS'))) as to_date
以上是在构建 table_current 的 SQL 中确定 from_date、to_date 的逻辑