2017-06-27 20 views
0

目标是根据公式为每个带寻找极小或较大的记录。找到每个记录带的离群值

输入:

Distance Rate 
10  5 
25  200 
50  300 
1000  5 
2000  2000 

带由我输入定义。例如,我想为这个输入设置两个频段(实际上有更多,比如10个频段):1-100,101-10000。

对于每一个乐队,我们要发现率是由式离群f(从平均值两个标准偏差值的距离,如果你有兴趣在公式中)中的所有记录

公式f我想用

(Rate- avg(Rate) over())/(stddev(Rate) over()) > 2

输出:

Distance Rate 
10  5 
1000  5 (this number is for illustrative purpose only.) 

困难的部分是I D o不知道如何为每个乐队做到这一点,这使得应用配方更加困难。

+0

什么是“记录带”?问题的部分是什么?示例查询将非常有帮助。你如何分配乐队? –

+0

@GordonLinoff我将它解释为一组行,并且某个列的值适合在任意范围内。 –

+0

@TabAlleman是的。让我对这个问题进行更多的解释。 –

回答

0

不知道你打算如何运用公式(我的猜测是UDF),你可以创建你的“乐队”由CASE表达式分组:

GROUP BY CASE 
    WHEN Distance BETWEEN 1 AND 100 THEN 'Band1' 
    WHEN Distance BETWEEN 101 AND 10000 THEN 'Band2' 
    ETC 
END 

同样使用在同一个CASE表达式一个RANK()OVER()函数,如果这对你的查询的其余部分更好。

编辑:根据你的说明,你需要在你的WHERE子句中处理这个相关的子查询。我会考虑将其封装在UDF中,以使主查询看起来更清晰。例如:

WHERE (Rate- {Correlated query to select the AVG(rate) of all rows in this band (using the above CASE statement to determine "this band"} over())/(stddev(Rate) over()) > 2 
+0

我已经在公式中添加更多信息。你可以看一下吗? –