【发布时间】:2012-07-19 22:29:49
【问题描述】:
是否可以将窗口与任何百分位函数一起使用?或者您知道获得滚动百分位值的变通方法吗?
使用移动平均很容易:
select avg(foo) over (order by foo_date rows
between 20 preceding and 1 preceding) foo_avg_ma
from foo_tab
但我不知道如何在同一窗口上获得 中位数(50% 百分位数)。
【问题讨论】:
-
好问题,但不应该将您的 avg 示例读取 avg(n) over(按 foo_date 前 20 行和 以下 之间的行排序)
-
不一定。这实现了我想要的,从过去的 20 个值到过去的 1 个值的移动平均值。中位数是问题。我可以通过滞后日期(1 年前和 20 年前)完成移动中位数,然后执行子查询计算日期范围的中位数。但这不是很有效。寻找其他想法。
-
我明白了,点了。您是否尝试过使用 nth_value(foo,n)?如果您的窗口大小是静态的,这可能是一个想法。
标签: oracle oracle11g analytic-functions