Oracle
 sql >> Database >  >> RDS >> Oracle

Interrompi gli stessi periodi alla fine del mese

Puoi calcolare il numero del "periodo" con una query ricorsiva, come segue.

Come espresso nei commenti sotto la tua domanda, non capisco cosa intendi con la colonna "settimana" (e sospetto che sia possibile che la tua definizione sia effettivamente incoerente, lascia a te il chiarimento).

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

Questo si basa sui periodi massimi di TABLE_1 e non sto usando affatto TABLE_2. Puoi unire le due tabelle dopo aver generato questo set di risultati dalla sola TABLE_1 o adattare l'approccio secondo necessità.