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

ORACLE SQL:Vytvořte nový řádek na základě rozsahu dat

Můžete použít rekurzivní dotaz (který bude fungovat bez ohledu na to, kolik měsíců zabírají vaše rozsahy):

WITH months ( id, start_date, end_date, final_date ) AS (
  SELECT id,
         start_date,
         LEAST( LAST_DAY( start_date ), end_date ),
         end_date
  FROM   table_name
UNION ALL
  SELECT id,
         end_date + INTERVAL '1' DAY,
         LEAST( ADD_MONTHS( end_date, 1 ), final_date ),
         final_date
  FROM   months
  WHERE  end_date < final_date
)
SEARCH DEPTH FIRST BY final_date SET dt_order
SELECT id,
       start_date,
       end_date
FROM   months;

Což pro ukázková data:

CREATE TABLE table_name (id, start_date, end_date) AS
SELECT 44, DATE '2020-01-04', DATE '2020-01-04' FROM DUAL UNION ALL
SELECT 44, DATE '2020-01-30', DATE '2020-02-10' FROM DUAL UNION ALL
SELECT 44, DATE '2020-02-27', DATE '2020-03-03' FROM DUAL;

Výstupy:

db<>fiddle zde



  1. Typy indexů v oracle?

  2. vztah již existuje po přidání pole Many2many v odoo

  3. MySql Connector 6.8.2 RC, Entity Framework 6 a Code First

  4. C# MYSQL – PŘI AKTUALIZACI DUPLIKÁTNÍHO KLÍČE – Stejný dotaz Různé výsledky