我的表格看起来像
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来提高效率?
答案 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;
虽然您可以将其表达为分析函数,但我没有看到这样做的优势。