我有一个像下面这样的表数据结构,
| ID|名称|开始日期|结束日期|创建日期|
| --|--|--|--|--|
| 100 |苹果|2023年11月1日|一九九九年十二月三十一日|2023年11月1日|
| 100 |Anar| 2023年10月10日|一九九九年十二月三十一日|23年9月12日|
| 100 |Anar| 2023年9月4日|2023年10月10日|2023年9月4日|
| 101 |蚂蚁|2023年10月1日|一九九九年十二月三十一日|2023年10月1日|
| 101 |蜜蜂|23年4月10日|一九九九年十二月三十一日|23年4月12日|
| 101 |蜜蜂|23年3月4日|23年4月10日|23年3月4日|
我想像下面这样更新数据,(第二行start_date应该像CREATE_DATE一样更新,END_DATE应该从下一个start_date开始更新)
| ID|名称|开始日期|结束日期|创建日期|
| --|--|--|--|--|
| 100 |苹果|2023年11月1日|一九九九年十二月三十一日|2023年11月1日|
|**100人|Anar| 2023年9月12日|2023年11月1日|2023年9月12日 *|
| 100 |Anar| 2023年9月4日|2023年10月10日|2023年9月4日|
| 101 |蚂蚁|2023年10月1日|一九九九年十二月三十一日|2023年10月1日|
|**101人|蜜蜂|2023年4月12日|2023年10月1日|2023年4月12日|
| 101 |蜜蜂|2023年3月4日|23年4月10日|23年4月10日|
注意-对于一个ID,一个用户的end_date应为31-DEC-99
1条答案
按热度按时间nwwlzxa71#
我假设你:
end_date
为9999-12-31
时才修改行;create_date
显示为start_date
;以及end_date
存在,我想将下一个create_date
作为end_date
,否则使用当前的end_date
。在这个假设下,你可以使用
CASE
表达式和LEAD
解析函数:字符串
其中,对于样本数据:
型
产出:
| ID|名称|开始日期|结束日期|创建日期|
| --|--|--|--|--|
| 100 |Anar| 2023-09-04 00:00:00| 2023-10-10 00:00:00| 2023-09-04 00:00:00|
| 100 |Anar| 2023-09-12 00:00:00| 2023年11月1日00:00:00| 2023-09-12 00:00:00|
| 100 |苹果|2023年11月1日00:00:00| 2019 - 09 -12 00:00:00| 2023年11月1日00:00:00|
| 101 |蜜蜂|2023-03-04 00:00:00| 2023-04-10 00:00:00| 2023-03-04 00:00:00|
| 101 |蜜蜂|2019 -04-12 00:00:00| 2023-10-01 00:00:00| 2019 -04-12 00:00:00|
| 101 |蚂蚁|2023-10-01 00:00:00| 2019 - 09 -12 00:00:00| 2023-10-01 00:00:00|
fiddle