sql >> Databasteknik >  >> RDS >> Oracle

Avbryt lika perioder i slutet av månaden

Du kan beräkna "period"-numret med en rekursiv fråga, enligt följande.

Som det uttrycks i kommentarerna under din fråga förstår jag inte riktigt vad du menar med kolumnen "vecka" (och jag misstänker att det är möjligt att din definition faktiskt är inkonsekvent - lämnas åt dig att förtydliga).

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

Detta är baserat på maxperioderna från TABLE_1, och jag använder inte TABLE_2 alls. Du kan slå samman de två tabellerna efter att du genererat den här resultatuppsättningen enbart från TABLE_1, eller anpassa tillvägagångssättet efter behov.




  1. Varför kan jag inte använda en variabel i ett postgres backslash-kommando (\COPY)

  2. MySQL:Kan en lagrad procedur anropa ett Java-program?

  3. Hur RIGHT()-funktionen fungerar i MySQL

  4. 9 viktiga uppgifter som DBA:er är ansvariga för