sql >> Base de Datos >  >> RDS >> Oracle

Interrumpir periodos iguales al final del mes

Puede calcular el número del "período" con una consulta recursiva, de la siguiente manera.

Como se expresa en los comentarios debajo de su pregunta, no entiendo muy bien lo que quiere decir con la columna "semana" (y sospecho que es posible que su definición sea realmente inconsistente; se lo dejo a usted para que lo aclare).

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

Esto se basa en los períodos máximos de TABLE_1, y no estoy usando TABLE_2 en absoluto. Puede unir las dos tablas después de generar este conjunto de resultados solo a partir de TABLE_1 o adaptar el enfoque según sea necesario.