Вы можете напрямую использовать оператор insert into <table> select ...
как
SQL> insert into test_table
select a.id, b.status
from table1 a
join table2 b
on a.msg_id = b.msg_id
where b.t_date >= trunc(sysdate) - interval '1' year
and not exists ( select 0 from test_table t where t.id = a.id );
SQL> commit;
, используя b.t_date >= trunc(sysdate) - interval '1' year
, начиная с предыдущего года до текущего дня.
Если вам нужно начать с определенную дату, такую как date'2019-04-01'
и сканирование на предстоящий годовой период,
, затем используйте b.t_date between date'2019-04-01' and date'2019-04-01' + interval '1' year - 1
и исключите уже существующие данные в пределах от test_table
до
not exists ( select 0 from test_table t where t.id = a.id )
с учетом того, что столбцы идентификаторов являются уникальными или первичными ключами в соответствующих таблицах.