Oracle
 sql >> база данни >  >> RDS >> Oracle

Прекъсвайте равни периоди в края на месеца

Можете да изчислите числото "период" с рекурсивна заявка, както следва.

Както е изразено в коментарите под въпроса ви, не разбирам напълно какво имате предвид с колоната „седмица“ (и подозирам, че е възможно определението ви всъщност да е непоследователно – оставено на вас да изясните).

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

Това се основава на максималните периоди от TABLE_1, а аз изобщо не използвам TABLE_2. Можете да обедините двете таблици, след като генерирате този набор от резултати само от TABLE_1, или да адаптирате подхода според нуждите.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Избягвайте CHAR-подрязване, когато използвате eclipselink

  2. Конвертиране в дата и час от Oracle

  3. XML таблица с Oracle 11g

  4. Вмъкване на данни в таблица с помощта на Execute Immediate в Oracle

  5. Разходи за заявка:Глобални временни таблици срещу колекции (виртуални масиви)