首页 > 解决方案 > 历史化 SQL 中历史错误的表

问题描述

假设我的表中有以下错误的历史数据:

ID     DATE START      DATE END
1      2020-10-16     2020-12-11
1      2020-11-09     2021-01-02     
1      2020-12-11     2021-01-19
1      2021-01-02     2020-12-11
1      2021-01-19     2050-12-31

我想要的是:

ID     DATE START      DATE END
1      2020-10-16     2020-11-09
1      2020-11-09     2020-12-11     
1      2020-12-11     2021-01-02
1      2021-01-02     2021-01-19
1      2021-01-19     2050-12-31

最后一条记录必须在“2050-12-31”之前关闭,并且每个新的开始日期都是上一条记录的结束日期。

假设我有数千条记录的这种情况,所以我不能只进行简单的更新。

非常感谢大家可以帮助我。

标签: sqlsql-serverdatabasetsqlsql-update

解决方案


Try this below script-

DEMO HERE

WITH CTE
AS
(
    select ROW_NUMBER() OVER(order by DATE_START) rn,
    * 
    from your_table_name
)


select 
a.id,
a.date_start,
case when b.date_start is null then a.date_end else b.date_start end date_end 
from cte a
left join cte b on a.rn = b.rn-1

推荐阅读