Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Interromper períodos iguais no final do mês


Você pode calcular o número do "período" com uma consulta recursiva, como segue.

Conforme expresso nos comentários da sua pergunta, não entendo muito bem o que você quer dizer com a coluna "semana" (e suspeito que seja possível que sua definição seja realmente inconsistente - cabe a você esclarecer).
with
  r (plan, period, max_periods, start_date) as (
    select  plan, 1, max_periods, start_date
      from  table_1
    union all
    select  plan, period + 1, max_periods,
            least(start_date + 7, add_months(trunc(start_date, 'mm'), 1))
      from  r
      where period < max_periods
  )
select plan, period, start_date
from   r
;

PLAN     PERIOD START_DATE
---- ---------- ----------
A             1 2020-05-01
A             2 2020-05-08
A             3 2020-05-15
A             4 2020-05-22
A             5 2020-05-29
A             6 2020-06-01
A             7 2020-06-08
A             8 2020-06-15
A             9 2020-06-22
A            10 2020-06-29
A            11 2020-07-01
A            12 2020-07-08

Isso é baseado nos períodos máximos de TABLE_1 e não estou usando TABLE_2. Você pode unir as duas tabelas depois de gerar esse conjunto de resultados apenas da TABLE_1 ou adaptar a abordagem conforme necessário.