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

Duplikování záznamů k vyplnění mezery mezi daty

Příkaz generátoru řádků můžete vytvořit pomocí CONNECT BY LEVEL syntaxi, zkřížené spojení s odlišnými produkty ve vaší tabulce a poté vnější spojení s vaší tabulkou cen. Posledním krokem je použití LAST_VALUE funkce a IGNORE NULLS pro opakování ceny, dokud nenarazíte na novou hodnotu, a protože jste chtěli zobrazení, pomocí CREATE VIEW prohlášení:

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. Spusťte dávkový soubor pomocí příkazu psql bez hesla

  2. Jak mohu vstoupit do SQL Server uloženého procesu z mého kódu C#?

  3. Jak funguje funkce DateTime() v SQLite

  4. Nahradit do syntaxe dotazu