Oracle
 sql >> Base de données >  >> RDS >> Oracle

Interrompre des périodes égales à la fin du mois

Vous pouvez calculer le nombre de "période" avec une requête récursive, comme suit.

Comme indiqué dans les commentaires sous votre question, je ne comprends pas très bien ce que vous voulez dire avec la colonne "semaine" (et je soupçonne qu'il est possible que votre définition soit en fait incohérente - à vous de clarifier).

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

Ceci est basé sur les périodes maximales de TABLE_1, et je n'utilise pas du tout TABLE_2. Vous pouvez joindre les deux tables après avoir généré cet ensemble de résultats à partir de TABLE_1 uniquement, ou adapter l'approche si nécessaire.