我有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
答案 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分析函数很容易理解:)