Oracle
 sql >> Base de données >  >> RDS >> Oracle

Duplication d'enregistrements pour combler l'écart entre les dates

Vous pouvez créer une instruction de générateur de ligne en utilisant le CONNECT BY LEVEL syntaxe, croisez avec les produits distincts de votre table, puis joignez-la à votre table de prix. La touche finale consiste à utiliser le LAST_VALUE fonction et IGNORE NULLS pour répéter le prix jusqu'à ce qu'une nouvelle valeur soit rencontrée, et puisque vous vouliez une vue, avec un CREATE VIEW déclaration :

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;