sql - 历史化 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”之前关闭,并且每个新的开始日期都是上一条记录的结束日期。
假设我有数千条记录的这种情况,所以我不能只进行简单的更新。
非常感谢大家可以帮助我。
解决方案
Try this below script-
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
推荐阅读
- macos - maven 无法识别 jetty 已安装
- regex - 使用正则表达式在Oracle中按分隔符拆分字符串
- matlab - 如何从 .txt 文件 matlab 读取数据
- android - 如何在屏幕旋转时保存 RecyclerView 复选框的状态
- go - Golang如何将sizeof结构提取为int
- python - 使用 Django 信号获取 absolute_url
- java - 如何增加 Gremlin Java Remote 客户端的超时设置?
- java - Jar 输出中损坏的 UTF-8 编码
- python - Matplotlib 3.0.2 使用 twinx 和主要次要格式化程序和定位器生成未对齐的日期轴
- oracle - 如何从 oracle 中的选择结果创建别名?