我有一个这样的表格DATE_VALUE:
Date Value
---- -----
01/01/2012 1.5
02/01/2012 1.7
03/01/2012 1.3
04/01/2012 2.1
05/01/2012 3.4
我想计算 2 个连续日期之间的值差之间的方差。但是,此简单查询不起作用:
select variance(lead( value,1) OVER (order by date) - value)
from DATE_VALUE
我收到一个错误:
ORA-30483:此处不允许使用窗口函数30483. 00000 - "此处不允许使用窗口函数"*原因:窗口函数只允许在查询的 SELECT 列表中使用。 而且,窗口函数不能是另一个窗口或组的参数 功能。
如果我将方差函数移出查询,查询工作正常:
select variance(difvalue) from (
select lead( value,1) OVER (order by rundate) - value as difvalue
from DATE_VALUE
);
我想知道是否有任何方法可以修改查询,以便不使用子查询?
来自 Oracle 参考:
因此,不能将分析函数放在聚合函数分析函数是在查询中执行的最后一组操作 除了最终的 ORDER BY 子句。所有加入和所有位置,组 BY 和 HAVING 子句在分析函数之前完成 处理。因此,分析函数只能出现在选择 列表或排序依据子句。
聚合函数通常与 GROUP BY 子句一起使用 SELECT 语句,其中 Oracle 数据库划分查询的行 表或视图到组中。在包含 GROUP BY 子句的查询中, 选择列表的元素可以是聚合函数,分组依据 表达式、常量或涉及其中之一的表达式。神谕 将聚合函数应用于每组行并返回 每个组的单个结果行。
如果省略 GROUP BY 子句,则 Oracle 将应用聚合 选择列表中的函数到查询表中的所有行,或者 视图。
中,因为聚合函数是在分析函数之前执行的(但您可以在分析函数中使用聚合函数)。
附言顺便说一下,子查询有什么问题?