Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Przerwij równe okresy na koniec miesiąca

Możesz obliczyć liczbę „okresu” za pomocą zapytania rekurencyjnego w następujący sposób.

Jak wyrażono w komentarzach pod twoim pytaniem, nie do końca rozumiem, co masz na myśli z kolumną „tydzień” (i podejrzewam, że Twoja definicja jest w rzeczywistości niespójna – pozostawiono tobie do wyjaśnienia).

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

Jest to oparte na maksymalnych okresach z TABLE_1 i w ogóle nie używam TABLE_2. Możesz połączyć dwie tabele po wygenerowaniu tego zestawu wyników z samej tabeli TABLE_1 lub dostosować podejście zgodnie z potrzebami.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle wykonuje natychmiastowe wykonanie bez żadnego błędu

  2. Strategia dotycząca stronicowania Oracle

  3. Zapytania sparametryzowane w C# dla Oracle — poważny i niebezpieczny błąd!

  4. PL/SQL:jak monitować użytkownika o wprowadzenie danych w procedurze?

  5. Anaconda 3.5 (64bit Windows) Zainstaluj cx_Oracle