给定表格:
名称 | 日期 | 最后日期 | 频率|
---|---|---|---|
人员1 | 2022年1月1日 | 2022年5月2日 | 30天 |
我们可以在INSERT SELECT中使用递归CTE来生成日期
我使用了where name = 'Person1'
,但可以根据需要删除或修改。如果表2中存在表1中的记录,应更新、复制该记录还是不更改该记录
我已自行将频率字段类型设置为int
以表示天数。我们可以改变这一点,以便能够在几天、几周、几个月等时间内对频率进行编程,但CTE的增加将变得更加复杂
底部有一个dbFiddle链接。
create Table table1( Name varchar(25), FirstDate Date, LastDate Date, Frequency int);
insert into table1 values ('Person1','1-Jan-2022','2-May-2022',30);
create table table2 (
Name varchar(25),
UpdatedDate date,
SomeColumn varchar(25));
INSERT INTO table2
WITH CTE (Name, Date_, LD ) AS
(SELECT
Name,
FirstDate AS Date_ ,
LastDate
FROM table1
WHERE Name = 'Person1'
UNION ALL
SELECT
Name,
Date_ + 30,
LD
FROM CTE
WHERE Date_ <= LD)
SELECT Name, Date_, null FROM CTE;
SELECT * FROM table2;
NAME|UPDATEDDATE|SOMICOLUMN:--------|:---------|:---------人物1|01-JAN-22|null人物1|31-JAN-22|nullPerson1|02-MAR-22 |null角色1|01-APR-22|null人物1| 01-MAY-22|nullPerson1| 31-MAY-22|null
db<gt;小提琴这里