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

Oracle 需要根据表中的生效日期列和生效日期列复制每天的数据

askTom 2015-09-11
180

问题描述


嗨,

我有一个事实表,它是存储日平均消耗量指标的有效间隔的日期范围。记录之间没有重叠的日期范围。但在不消耗的情况下,第一条记录的生效日期与下一条记录的生效日期之间可能存在间隔。
示例数据示例:
实例_编号AVG_DAILY_卷有效_开始_日期有效_结束_日期
1 100 2014年1月1日-2014年1月31日
2014年2月1日-2014年3月31日
1 102 2014年1月1日- 2014年4月30日
1 107 2014年6月1日-2015年7月31日
2 200 2013年1月1日- 2013年1月31日

现在,我需要根据实际值和实际值将这些记录拆分为每天的级别。
例如:

实例_编号AVG_DAILY_卷日期
1 100 2014年1月1日
1 100 2014年1月2日
...
1 100 2014年1月31日
2014年2月1日
..
2014年3月31日
1 102 2014年1月1日
...
1 102 2014年4月30日
1 107 2014年6月1日
..
1 107 2015年7月31日

我可以通过在生效日期和生效日期之间联接DAY_D.D.D表来实现此目的。但事实表的数据量很大,尽管它在一个日期范围内维持平均每日指标。
所以这个结果一直都在给我回报。
是否有更好的方法在日级别拆分此,而不使用子句连接W_day_D表。可能正在使用连接子句?

请协助。

致以问候,
维什

专家解答

您引用的W_day_D表是什么?

要将数据转换为每天的一行,则您概述的基本方法是正确的:加入到日期的完整列表,其中日期介于开始和结束之间:

create table t (instance_number int, volume int, start_dt date, end_dt date);
insert into t values (1, 100, '01-Jan-2014', '31-JAN-2014');
insert into t values (1, 105, '01-FEB-2014', '31-MAR-2014');
insert into t values (1, 102, '01-APR-2014', '30-APR-2014');

with dates as (
  select date'2013-12-31'+rownum dt
  from   dual
  connect by level <= 90
)
  select t.instance_number, t.volume, dt
  from   t, dates
  where  dt between start_dt and end_dt
  order  by dt;

INSTANCE_NUMBER     VOLUME DT                
--------------- ---------- -------------------
              1        100 01/01/2014 00:00:00
              1        100 02/01/2014 00:00:00
...
              1        100 30/01/2014 00:00:00
              1        100 31/01/2014 00:00:00
              1        105 01/02/2014 00:00:00
              1        105 02/02/2014 00:00:00
...
              1        105 27/02/2014 00:00:00
              1        105 28/02/2014 00:00:00
              1        105 01/03/2014 00:00:00
              1        105 02/03/2014 00:00:00
...
              1        105 30/03/2014 00:00:00
              1        105 31/03/2014 00:00:00

(输出经过调整以提高可读性)。

您需要向我们提供更多信息,以便在性能方面有所帮助。我们至少需要一个执行计划输出和表定义。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论