sql - 如何通过匹配将日期从一行复制到另一行(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?
我非常感谢任何解决这个问题的尝试,如果需要,我愿意提供更多细节。
最好的,
阿克塞尔
解决方案
推荐阅读
- ruby-on-rails - 错误:列“increment_by”不存在 - Postgres 10 和 Rails 5
- terraform - 创建 CacheSecurityGroup 时出错:InvalidParameterValue
- matlab - 如何在 Matlab 中计算日期时间的“外减法”
- angular - Angular 4 输入指令 onSave
- javascript - 如何在 LiveCycle 中添加一年并从日期中减去一天?
- java - 使用 Java 10 的 jaotc 编译单个类
- python - 我在 pygame.Surface() 里面放了什么?
- c# - Google Assistant Dialogflow API V2 webhook ETag 错误
- sql-server - 基于日期的 T-SQL 每日数据备份
- apache-flink - 跨 Flink 数据流的多个步骤的节点内的任务本地处理