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

Afbryd lige perioder i slutningen af ​​måneden

Du kan beregne "periode"-tallet med en rekursiv forespørgsel som følger.

Som det kommer til udtryk i kommentarerne under dit spørgsmål, forstår jeg ikke helt, hvad du mener med kolonnen "uge" (og jeg formoder, at det er muligt, at din definition faktisk er inkonsekvent - overladt til dig at præcisere).

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

Dette er baseret på de maksimale perioder fra TABLE_1, og jeg bruger slet ikke TABLE_2. Du kan forbinde de to tabeller, efter du har genereret dette resultatsæt fra TABLE_1 alene, eller tilpasse tilgangen efter behov.




  1. Forstå dataarkitekters rolle i datastyring

  2. Tillader MySQL at oprette database med prik?

  3. SQL-forespørgsel:rækkefølge efter længde på tegn?

  4. Generel fejl:1366 Forkert heltalsværdi med Doctrine 2.1 og Zend Form opdatering