Necesito hacer algo realmente extraño, que es crear registros falsos en una vista para llenar el espacio entre las fechas publicadas de los precios de los productos.Duplicar registros para llenar la brecha entre las fechas
En realidad, mi escenario es un poco más complicado que eso, pero me he simplificado a productos/fechas/precios.
Supongamos que tenemos la siguiente tabla:
create table PRICES_TEST
(
PRICE_DATE date not null,
PRODUCT varchar2(13) not null,
PRICE number
);
alter table PRICES_TEST
add constraint PRICES_TEST_PK
primary key (PRICE_DATE, PRODUCT);
Con estos registros:
registrosinsert into PRICES_TEST values (date'2012-04-15', 'Screw Driver', 13);
insert into PRICES_TEST values (date'2012-04-18', 'Screw Driver', 15);
insert into PRICES_TEST values (date'2012-04-13', 'Hammer', 10);
insert into PRICES_TEST values (date'2012-04-16', 'Hammer', 15);
insert into PRICES_TEST values (date'2012-04-19', 'Hammer', 17);
selección me volverán esto:
PRICE_DATE PRODUCT PRICE
------------------------- ------------- ----------------------
13-Apr-2012 00:00:00 Hammer 10
16-Apr-2012 00:00:00 Hammer 15
19-Apr-2012 00:00:00 Hammer 17
15-Apr-2012 00:00:00 Screw Driver 13
18-Apr-2012 00:00:00 Screw Driver 15
Suponiendo que hoy es Abr 21 de 2012, Necesito una vista que deberá repetir cada precio todos los días hasta que se publique un nuevo precio. De esta manera:
PRICE_DATE PRODUCT PRICE
------------------------- ------------- ----------------------
13-Apr-2012 00:00:00 Hammer 10
14-Apr-2012 00:00:00 Hammer 10
15-Apr-2012 00:00:00 Hammer 10
16-Apr-2012 00:00:00 Hammer 15
17-Apr-2012 00:00:00 Hammer 15
18-Apr-2012 00:00:00 Hammer 15
19-Apr-2012 00:00:00 Hammer 17
20-Apr-2012 00:00:00 Hammer 17
21-Apr-2012 00:00:00 Hammer 17
15-Apr-2012 00:00:00 Screw Driver 13
16-Apr-2012 00:00:00 Screw Driver 13
17-Apr-2012 00:00:00 Screw Driver 13
18-Apr-2012 00:00:00 Screw Driver 15
19-Apr-2012 00:00:00 Screw Driver 15
20-Apr-2012 00:00:00 Screw Driver 15
21-Apr-2012 00:00:00 Screw Driver 15
¿Alguna idea de cómo hacer eso? I no puedo usar realmente usar otras tablas auxiliares, triggers ni programación PL/SQL, realmente necesito hacer esto usando a view.
Creo que esto se puede hacer utilizando Oracle Analytics, pero no estoy familiarizado con eso. Traté de leer esto http://www.club-oracle.com/articles/analytic-functions-i-introduction-164/ pero no lo conseguí en absoluto.
NVM, lo entiendo ahora :) Será posible generar datos con el uso creativo de la tabla 'Dual'. – mellamokb
Podría suponer que Oracle Analytics tiene su propia tabla de dimensiones de fecha para realizar dicha función. ¿Podrías crear tu propia tabla de dimensiones de fecha? –
aquí hay un artículo interesante sobre la creación de una vista de calandrado dinámico en tsql (sí, quiere un oráculo, pero puede ser alterado): http://sqlserverpedia.com/blog/sql-server-bloggers/tsql-tuesday-18- using-a-recursive-cte-to-create-a-calendar-table/ –