【发布时间】:2021-11-02 20:48:35
【问题描述】:
我有一个非常脏的表,其中混合了开始日期和一个值的更改生效日期。
表格是这样的
| id | value | startdate | enddate | effective date |
|---|---|---|---|---|
| 1 | 0.3 | 2020-10-07 | 2021-02-28 | 2020-07-01 |
| 1 | 1 | 2020-10-07 | 2021-02-28 | 2020-10-07 |
| 2 | 0.46 | 2021-01-01 | 2021-01-01 | |
| 2 | 1 | 2021-01-01 | 2020-10-07 | 2021-05-01 |
| 3 | 1 | 2021-08-01 | 2021-08-01 | |
| 4 | 1 | 2019-03-01 | 2019-03-01 | |
| 4 | 0.5 | 2019-03-01 | 2020-08-01 | |
| 4 | 0.7 | 2019-03-01 | 2021-05-01 |
当结束日期为空时,表示没有变更计划,当开始日期较晚且生效日期时,表示他们删除旧记录并创建具有其他值的新记录。
我的目标是清理桌子并将其整理成这样。
| id | value | startdate_valid | enddate_valid |
|---|---|---|---|
| 1 | 0.3 | 2020-07-01 | 2020-10-07 |
| 1 | 1 | 2020-10-07 | 2021-02-28 |
| 2 | 0.46 | 2021-01-01 | 2021-05-01 |
| 2 | 1 | 2021-05-01 | |
| 3 | 1 | 2021-08-01 | |
| 4 | 1 | 2019-03-01 | 2020-08-01 |
| 4 | 0.5 | 2020-08-01 | 2021-05-01 |
| 4 | 0.7 | 2021-05-01 |
知道如何实现这一目标吗?
编辑:
我想我可以通过使用获得 startdate_valid 值
MAX([effective date]) OVER(PARTITION BY id, YEAR([effective date]), MONTH([effective date]) ORDER BY [effective date])
这是有道理的,因为我在effective date 中包含了startdate,但我仍然无法获得enddate_valid
【问题讨论】:
-
您可能想在这里阅读:docs.microsoft.com/en-us/sql/t-sql/functions/…>
-
非常感谢您的回答我查看了您与我共享的文档,但我无法看到延迟如何提供帮助,例如,对于我需要的
startdate_valid为 id 组排序startdate和effective_date之间的日期
标签: sql sql-server