我需要在scd-2表中插入一条记录。我们使用的数据库是oracle12c。情况如下-scd2表中的当前记录集-
Prod_Id Begin_Version_dt End_version_dt
'1234', '2020-03-10', '2020-04-09'
'1234', '2020-04-10', '2020-05-10'
'1234', '2020-05-11', '9999-12-31'
prod事务表中有一条记录,如下所示-
Prod_Id Trans_dt
'1234', '2020-05-15'
scd2中更新的记录集应为-
Prod_Id Begin_Version_dt End_version_dt
'1234', '2020-03-10', '2020-04-09'
'1234', '2020-04-10', '2020-05-10'
'1234', '2020-05-11', '2020-05-14'
'1234', '2020-05-15', '9999-12-31'
我试过使用超前和滞后函数,但他们没有给我额外的记录集。任何指针都会有很大的帮助。
2条答案
按热度按时间pprl5pva1#
您需要使用两个查询。第一个用于插入记录,第二个用于更新日期,如下所示:
创建示例数据
当前数据视图:
您正在查找的查询
更新数据:
wpx232ag2#
你可以试着用
LEAD
使用默认值:演示
这里的逻辑是,如果可用,我们选择任何非
NULL
结束版本日期。如果结束版本日期不可用,我们将在序列中的下一个开始日期之前开始。如果这也不可用,那么我们默认为报告9999-12-31
作为结束版本日期。