Ho bisogno di fare qualcosa di veramente strano, ovvero creare record falsi in una vista per colmare il divario tra le date pubblicate dei prezzi dei prodotti.Duplicare i record per riempire il divario tra le date
In realtà, il mio scenario è un po 'più complicato di così, ma ho semplificato i prodotti/date/prezzi.
Diciamo che abbiamo questa tabella:
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 questi record:
recordinsert 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);
selezionando mi torneranno questo:
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
Supponendo che oggi è 21 Apr 2012, Ho bisogno di una vista che deve ripetere ogni prezzo ogni giorno fino a quando viene pubblicato un nuovo prezzo. Così:
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
Qualche idea su come farlo? I non può usare davvero altre tabelle ausiliarie, trigger o programmazione PL/SQL, ho davvero bisogno di fare questo usando una vista.
Penso che questo possa essere fatto usando l'analisi Oracle, ma non mi è familiare. Ho provato a leggere questo http://www.club-oracle.com/articles/analytic-functions-i-introduction-164/ ma non l'ho capito affatto.
NVM, lo capisco ora :) Sarà possibile generare dati con l'uso creativo della tabella 'Dual'. – mellamokb
Potrei presumere che Oracle Analytics abbia la propria tabella delle dimensioni delle date per eseguire tale funzione. Potresti semplicemente creare la tua tabella delle dimensioni della data? –
ecco un interessante articolo sulla creazione di una vista calandar dinamica in tsql (sì, vuoi oracle ma forse può essere modificato): http://sqlserverpedia.com/blog/sql-server-bloggers/tsql-tuesday-18- using-a-recursive-cte-to-create-a-calendar-table/ –