关于解析函数的相关函数

时间:2015-02-27 15:46:12

标签: sql oracle oracle11g

我的表格看起来像

TDate         Name     Value     
20110101     xxx      1.2
20110102     xxx      1.3
...
20110101     yyy      3.4
20110101     yyy      32.1

我想计算每个名字之间的值的相关性(比如xxx和yyy之间)。这是我的代码:

Create table corrDEC as
Select distinct a.name ASymbol,b.name BSymbol, 
corr(a.value,b.value) over (partition by a.name,b.name)  Correlation
From logprofitDEC a, logprofitDEC b
where a.name<>b.name
Order by 1,2,3 desc;

我是否必须添加

where To_date(a.Tdate,'YYYYMMDD')=To_date(b.Tdate,'YYYYMMDD')

在where子句中?

如何通过修复where where来提高效率?

1 个答案:

答案 0 :(得分:0)

如果你想要x和y之间的相关性,并且它们每个都有一个与之相关的日期,那么你需要这样的东西:

select corr(x, y)
from (select tdate, max(case when name = 'xxx' then value end) as x
             max(case when name = 'yyy' then value end) as y
      from logprofitDEC
      group by tdate
     ) t;

虽然您可以将其表达为分析函数,但我没有看到这样做的优势。