sql >> Database >  >> RDS >> Oracle

Gelijke perioden onderbreken aan het einde van de maand

U kunt het "punt"-nummer als volgt berekenen met een recursieve zoekopdracht.

Zoals aangegeven in de opmerkingen onder uw vraag, begrijp ik niet helemaal wat u bedoelt met de kolom "week" (en ik vermoed dat het mogelijk is dat uw definitie in feite inconsistent is - het wordt aan u overgelaten om dit te verduidelijken).

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

Dit is gebaseerd op de maximale perioden van TABLE_1 en ik gebruik TABLE_2 helemaal niet. Je kunt de twee tabellen samenvoegen nadat je deze resultatenset alleen op basis van TABLE_1 hebt gegenereerd, of de aanpak naar behoefte aanpassen.




  1. mysql verander alle waarden in een kolom

  2. Hoe maak je een externe sleutel die ook een primaire sleutel is in MySQL?

  3. MS SQL Server laatst ingevoerde ID

  4. MySQL - Kolom hernoemen