sql >> Databáze >  >> RDS >> Oracle

Na konci měsíce přerušte stejné období

Číslo "období" můžete vypočítat pomocí rekurzivního dotazu následovně.

Jak je vyjádřeno v komentářích pod vaší otázkou, úplně nerozumím tomu, co máte na mysli se sloupcem „týden“ (a mám podezření, že je možné, že vaše definice je ve skutečnosti nekonzistentní – nechám na vás, abyste si to ujasnili).

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

Toto je založeno na maximálních obdobích z TABLE_1 a TABLE_2 vůbec nepoužívám. Po vygenerování této sady výsledků ze samotné TABLE_1 můžete obě tabulky spojit, nebo upravit přístup podle potřeby.




  1. CHYBA Postgresu:nelze otevřít soubor pro čtení:Povolení odepřeno

  2. Výstup výsledků dotazu SQLite jako seznam oddělený tabulátory

  3. Vyberte název a hodnotu sloupce z tabulky

  4. ORA-00942:tabulka nebo pohled neexistuje (funguje při samostatném SQL, ale nefunguje ve funkci oracle)