暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 存储历史记录

askTom 2017-04-05
328

问题描述

嗨,

我要求在包含不同产品的历史价格信息的表上写一个视图。

产品的第一历史记录 (按日期顺序排序时) 应将GRANT_DATE作为有效日期,随后的历史记录应将有效日期作为先前记录的终止日期。当在产品id上加入时,第一条记录的GRANT_DATE来自另一个表

例如:

产品价格终止日期
1 10 9/3/17
1 11 24/3/17
1 12 30/3/17


所以我的观点应该产生

产品标识有效日期价格
1 4/3/17 10
1 9/3/17 11
1 24/3/17 12

有人可以帮助我如何实现此逻辑。

请找到下面的测试用例:

创建表historic_price (产品编号 (10),价格编号 (5),终止日期日期)

插入hisotric_price值 (1,10,9-3-17);

插入hisotric_price值 (1,11,24-3-17);

插入hisotric_price值 (1,12,30-3-17);

创建表product_info (product_id号 (10),授权日期日期)

插入产品信息 (1,4-3-17);

而且,如果在同一天historic_price表中有多个产品条目,我们需要考虑max(cessation_date) 来获取当天的最后一个条目。

如果需要任何进一步的信息,请告诉我。


干杯
西里沙

专家解答

你是知道的...您也许应该考虑发布一个测试用例,该用例甚至有一定的工作机会。一些建议你付出一点努力的东西。这表明你有既得利益与我们一起努力解决问题 ....

SQL> create table historic_price (product_id number(10),price number(5),cessation_date date);

Table created.

SQL> insert into hisotric_price values(1,10,9-3-17);
insert into hisotric_price values(1,10,9-3-17)
            *
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> insert into hisotric_price values(1,11,24-3-17);
insert into hisotric_price values(1,11,24-3-17)
            *
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> insert into hisotric_price values(1,12,30-3-17);
insert into hisotric_price values(1,12,30-3-17)
            *
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> create table product_info (product_id number(10),grant_date date)
  2  insert into product_info (1,4-3-17);
insert into product_info (1,4-3-17)
*
ERROR at line 2:
ORA-00922: missing or invalid option
复制


因为就目前而言... 它的意思是 “您只花了10秒钟,但您希望我们花10分钟或更长时间”。叹息

SQL> create table historic_price (product_id number(10),price number(5),cessation_date date);

Table created.

SQL> insert into historic_price values(1,10,date '2017-03-09');

1 row created.

SQL> insert into historic_price values(1,11,date '2017-03-24');

1 row created.

SQL> insert into historic_price values(1,12,date '2017-03-30');

1 row created.

SQL> create table product_info (product_id number(10),grant_date date);

Table created.

SQL> insert into product_info values (1,date '2017-03-04');

1 row created.

SQL>
SQL> with all_records as
  2   ( select product_id, price, cessation_date d from historic_price
  3     union all
  4     select product_id, null, grant_date d from product_info )
  5  select
  6    product_id, d, lead(price) over ( partition by product_id order by d )
  7  from all_records
  8  order by 1,2;

PRODUCT_ID D         LEAD(PRICE)OVER(PARTITIONBYPRODUCT_IDORDERBYD)
---------- --------- ----------------------------------------------
         1 04-MAR-17                                             10
         1 09-MAR-17                                             11
         1 24-MAR-17                                             12
         1 30-MAR-17

4 rows selected.
复制


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论