【发布时间】:2014-06-30 11:10:11
【问题描述】:
尝试了几次后,似乎无法掌握Oracle Analytic的功能,所以我又转过来了,有一个新问题: 我有下表:
create table TConcordance (
CurrentData varchar2(6),
CurrentStart date,
PredictorData varchar2(6),
TimeFrame varchar2(3),
PredictorStart date,
PatternLength number, -- l
PatternShift number, -- h
KTau number,
SRho number,
Gini number,
WeakC number);
在 (CurrentData, CurrentStart, PredictorData,TimeFrame) 上创建主键。
这是我的问题:我需要检索 CurrentStart 和(在单独的查询中)PredictorStart 以获取在(CurrentData、TimeFrame、CurrentStart)的任意组合中具有最高 SRho 值的那些记录。 在更大的 Select Union All 中,我有以下子查询按预期工作,并为每个可能的 CurrentStart 返回 Max(SRho):
select t.CurrentData, t.TimeFrame, t.CurrentStart, max(t.SRho)
from TConcordance t, AllHistory ah
where t.CurrentData=ah.Symbol and t.TimeFrame=ah.TimeFrame
group by t.CurrentData, t.TimeFrame, t.CurrentStart
现在,我的问题是:对于上述查询返回的每一行,我也需要检索 PredictorStart 列。我尝试了以下方法:
select distinct t.CurrentData, t.TimeFrame, t.CurrentStart,
max(t.SRho) over (partition by t.CurrentData, t.TimeFrame, t.CurrentStart
order by t.CurrentStart) "MaxSRho", t.PredictorData, t.PredictorStart
不幸的是,这似乎将添加的列视为 distinct 子句的一部分,因此返回表中的所有行...
任何帮助将不胜感激。
【问题讨论】:
-
PredictorData是主键的一部分,因此t中的每一行都会有所不同。所以它显示所有行是正确的,确定吗?与分析没有直接关系,如果您将这些列添加到group by,您会看到与原始版本相同的内容。还是您的意思是要显示与您获得的max(t.SRHo)值相对应的Predictor*列? -
@AlexPoole,确实,我想显示与我从第一个查询中获得的 max(t.SRHo) 值相对应的 PredictorData 和 PredictorStart。
标签: sql oracle window-functions