sql >> Database >  >> RDS >> Oracle

Records dupliceren om gaten tussen datums te vullen

U kunt een rijgeneratorinstructie maken met behulp van de CONNECT BY LEVEL syntaxis, kruis samen met de verschillende producten in uw tabel en voeg die vervolgens toe aan uw prijzentabel. De laatste hand is om de LAST_VALUE . te gebruiken functie en IGNORE NULLS om de prijs te herhalen totdat een nieuwe waarde wordt gevonden, en aangezien u een weergave wilde, met een CREATE VIEW verklaring:

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. Denormalisatie:wanneer, waarom en hoe

  2. Zoeken op expressie-indexen

  3. Schemapatroon zoeken naar gegevensklasse-associatie

  4. Problemen oplossen AlwaysOn - Soms zijn er veel paar ogen nodig