Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Unterbrechen Sie gleiche Perioden am Ende des Monats

Sie können die „Punkt“-Nummer wie folgt mit einer rekursiven Abfrage berechnen.

Wie in den Kommentaren unter Ihrer Frage zum Ausdruck gebracht, verstehe ich nicht ganz, was Sie mit der Spalte "Woche" meinen (und ich vermute, dass Ihre Definition tatsächlich inkonsistent ist - es bleibt Ihnen überlassen, dies zu klären).

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

Dies basiert auf den maximalen Perioden von TABLE_1, und ich verwende TABLE_2 überhaupt nicht. Sie können die beiden Tabellen zusammenführen, nachdem Sie diese Ergebnismenge allein aus TABLE_1 generiert haben, oder den Ansatz nach Bedarf anpassen.