如何根据上一行插入新行

How to insert a new row based on previous row

给定 table:

Name Date Last Date Frequency
Person1 1-Jan-2022 2-May-2022 30 Days

预期输出:

Name Updated Date Some Other Column
Person1 1-Jan-2022 Value 1
Person1 31-Jan-2022 Value 2
Person1 2-Mar-2022 Value 3
Person1 1-Apr-2022 Value 4
Person1 1-May-2022 Value 5

如上所示,我们得到了一条记录,要求的是从这条记录中创建一条新的table。我们必须继续插入新行,直到预期 table 中的“更新日期”(上一行日期 + 频率天数)小于给定 table 中的“最后日期”。

我想了解 Oracle SQL 是否有办法实现这一点。 (没有 PL/SQL)。

我们可以在 INSERT SELECT 中使用递归 CTE 来生成日期。
我使用了 where name = 'Person1' 但这可以根据需要删除或修改。如果表 1 中的记录存在于表 2 中,应该更新、复制还是不做任何更改?
我冒昧地将天数的频率字段类型设置为 int。我们可以将其更改为能够以天、周、月等为单位对频率进行编程,但 CTE 的增量会变得更加复杂。
底部有个dbFiddle link.

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 | SOMECOLUMN
:------ | :---------- | :---------
Person1 | 01-JAN-22   | null      
Person1 | 31-JAN-22   | null      
Person1 | 02-MAR-22   | null      
Person1 | 01-APR-22   | null      
Person1 | 01-MAY-22   | null      
Person1 | 31-MAY-22   | null      

db<>fiddle here