2017-10-10 47 views
1

我想計算沒有異常值的平均值(帶有2個標準偏差)。我不斷收到錯誤消息「聚合不應出現在WHERE子句中,除非它是在含有HAVING子句或選擇列表在子查詢中,並且被聚合的列是外部引用。如何計算沒有異常值的平均值

select 
    b.[Location], 

    b.[txtOrderSubType], 

    avg (DATEDIFF(MINUTE, b.[dteActualStartDate], b.[dteActualEndDate])) as 
[Avg Duration in min], 


from dbo.tbl1 
Where   
    DATEDIFF(MINUTE, b.[dteActualStartDate], b.[dteActualEndDate])< ( 
    AVG(DATEDIFF(MINUTE, b.[dteActualStartDate], b.[dteActualEndDate]))+ 
    2*STDEVP(DATEDIFF(MINUTE, b.[dteActualStartDate], b.[dteActualEndDate]))) 

and DATEDIFF(MINUTE, b.[dteActualStartDate], b.[dteActualEndDate])> ( 
     AVG(DATEDIFF(MINUTE, b.[dteActualStartDate], b.[dteActualEndDate]))- 
     2*STDEVP(DATEDIFF(MINUTE, b.[dteActualStartDate], b.[dteActualEndDate]))) 

    group by b.[Location], b.[txtOrderSubType] 

回答

0

在一個水平,問題是沒有意義的,因爲一般的變化。雖然我會回答這個問題,你可能想離羣的其他一些定義。

select avg(al) 
from (select t.*, avg(val) over() as avg_val, stdev(val) over() as stdev_val 
     from t 
    ) t 
where val between avg_val - 2 * stdev_val and avg_val + 2 * stdev_val; 

我不知道如何融入您的查詢,這似乎是不必要的複雜。