需要差距查询来检查每日价格数据的差距

时间:2014-04-16 06:14:54

标签: sql oracle

我有2个证券的下面数据作为例证,有2个表我想检查差距

价格表---时间序列格式仅工作日数据

Sec ID    Date       Price
1       01-Jan-2014  10
1       02-Jan-2014  --- gap in price record not exist in price table
1       03-Jan-2014  --- gap in price record not exist in price table
1       04-Jan-2014  Saturday 
1       05-Jan-2014  Sunday
1       06-Jan-2014  --- gap in price record not exist in price table
1       07-Jan-2014  11

从2014年1月2日至2014年1月6日,价格需要输出差距

股票表---以HOC格式存储的数据

Sec ID      Start        End          Shares
1          01-Jan-2013  31-Dec-2013    100
1          07-Jan-2014  31-Jan-2014    105

从2014年1月1日至2014年1月6日(周末应包括在内)产生股票需求差距

我可以随身携带日历表,其中包含所有工作日和排除周末

请告知有效的查询

由于 亚太区首席技术官Matt

1 个答案:

答案 0 :(得分:0)

你用不好的方式写了你的问题,但我会猜测你需要什么。

所以我用这种方式创建了虚拟表:

  create table nk_first_one(
  sec_id NUMBER,
  price_date date,
  price VARCHAR2(50)
  );

  insert into nk_first_one values(1, '01-Jan-2014', '10');
  insert into nk_first_one values(1, '04-Jan-2014', 'Saturday');
  insert into nk_first_one values(1, '05-Jan-2014', 'Sunday');
  insert into nk_first_one values(1, '07-Jan-2014', '11');

这是一个简单的查询,它计算表格中每一行的每个缺失日期:

  select sec_id, 
  price_date, 
  lag(PRICE_DATE, 1, PRICE_DATE) over(order by PRICE_DATE) prevoius_price_date,
  (price_date - lag(PRICE_DATE, 1, PRICE_DATE) over(order by PRICE_DATE)) price_days_gap
  from nk_first_one;

以下是该查询的结果:

      SEC_ID PRICE_DATE PREVOIUS_PRICE_DATE PRICE_DAYS_GAP
  ---------- ---------- ------------------- --------------
           1 01-JAN-14  01-JAN-14                        0 
           1 04-JAN-14  01-JAN-14                        3 
           1 05-JAN-14  04-JAN-14                        1 
           1 07-JAN-14  05-JAN-14                        2 

因此,对于每一行,您都可以获得之前分配的价格天数(据我所知,您需要PRICE_DAYS_GAP> 1)。

这就是你想要的吗? 对于第二个查询,您可以采用相同的方式。 Oracle分析函数很容易理解:)