我需要做的事情很奇怪,这是在一个视图创造有虚假记载填写产品价格的发布日期之间的差距之间的差距。其实,我的场景比这个稍微复杂一些,但我简化为产品/日期/价格。复制记录填写日期
比方说,我们有这个表:
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);
有了这些记录:
insert 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);
选择记录将返回我:
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
今天假设是2012年4月21日,我需要查看,它应该每天重复每个价格联合国直到发布新的价格。像这样:
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
任何想法如何做到这一点?我不能真的使用其他辅助表,触发器也没有PL/SQL编程,我真的需要这样做,使用一个视图。
我认为这可以使用oracle分析来完成,但我并不熟悉这一点。我试图读这http://www.club-oracle.com/articles/analytic-functions-i-introduction-164/,但我没有得到它。
NVM,我现在明白了吧:)这将有可能产生与创造性地使用'Dual'表的数据。 – mellamokb 2012-04-20 23:46:24
我可以假设oracle分析具有它自己的日期维度表来执行此功能。你可以创建自己的日期维度表吗? – 2012-04-20 23:53:01
这里是创造TSQL动态calandar视图一篇有趣的文章(是的,你要预言,但也许它可以改变):http://sqlserverpedia.com/blog/sql-server-bloggers/tsql-tuesday-18-使用-A-递归CTE到创建-A-日历表/ – 2012-04-20 23:58:00