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

Powielanie rekordów w celu wypełnienia luki między datami

Możesz utworzyć instrukcję generatora wierszy za pomocą CONNECT BY LEVEL składni, łączenie krzyżowe z różnymi produktami w tabeli, a następnie łączenie zewnętrzne z tabelą cen. Ostatnim akcentem jest użycie LAST_VALUE funkcja i IGNORE NULLS powtarzać cenę aż do napotkania nowej wartości, a ponieważ chciałeś zobaczyć, z CREATE VIEW oświadczenie:

create view dense_prices_test as
select
    dp.price_date
  , dp.product
  , last_value(pt.price ignore nulls) over (order by dp.product, dp.price_date) price
from (
      -- Cross join with the distinct product set in prices_test
      select d.price_date, p.product
      from (
            -- Row generator to list all dates from first date in prices_test to today
            with dates as (select min(price_date) beg_date, sysdate end_date from prices_test)
            select dates.beg_date + level - 1 price_date 
            from dual
            cross join dates
            connect by level <= dates.end_date - dates.beg_date + 1
            ) d
      cross join (select distinct product from prices_test) p
     ) dp
left outer join prices_test pt on pt.price_date = dp.price_date and pt.product = dp.product;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Proces aktualizacji krok po kroku do wersji R12.2 Aktualizacja, część -3

  2. Co oznacza <> w Oracle?

  3. Przykład funkcji potokowej Oracle

  4. Załączniki w aplikacjach Oracle R12

  5. Jak napisać skrypt wstawiania oracle z jednym polem jako CLOB?