首页 > 解决方案 > 如何通过匹配将日期从一行复制到另一行(SCD 类型 2)

问题描述

我一直在努力用 SQL 编写一个查询,将公司新许可计划的 start_date 设置为到期日期/end_date 加上公司先前许可计划的一天。

在下图中,您可以更清楚地看到我要完成的工作。

查询说明

到目前为止我已经尝试过:

更新 dbo.license_case_study 设置 start_date = [Expiration date] 其中 [Product service state] = 'active' and [Company ID] = [Company ID] and start_date 不为空

上面的查询显然有缺陷,尤其是在 [Company ID] = [Company ID] 的情况下。我不知道如何将到期日期/结束日期从公司以前的许可计划复制到公司的新许可计划。使用 [Company ID] = [Company ID] 我试图匹配这两行,这样 end_date 就不会被复制到其他公司的新许可计划中。

对于每家拥有新的有效许可计划的公司,都需要将到期日期/结束日期从公司终止的许可计划复制到公司的有效许可计划,而不仅仅是我附加到这个问题的图像中的一家公司。也许我应该使用 MERGE 而不是 UPDATE?

我非常感谢任何解决这个问题的尝试,如果需要,我愿意提供更多细节。

最好的,

阿克塞尔

标签: sqlsql-updatescd

解决方案


推荐阅读