Oracle
 sql >> база данни >  >> RDS >> Oracle

Дублиране на записи за запълване на празнината между датите

Можете да създадете израз за генериране на редове, като използвате CONNECT BY LEVEL синтаксис, кръстосано съединяване с отделните продукти във вашата таблица и след това външно присъединяване към вашата таблица с цени. Последният щрих е да използвате LAST_VALUE функция и IGNORE NULLS за да повторите цената, докато се срещне нова стойност и тъй като искате изглед, с CREATE VIEW изявление:

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. Надграждане на Grid Control след ръчно надграждане на DB

  2. Въведение в Native Dynamic SQL в Oracle Database

  3. varchar2(n BYTE|CHAR) по подразбиране -> CHAR или BYTE

  4. Вземете списък с всички функции и процедури в база данни на Oracle

  5. TEMPFILE Офлайн физическа готовност