SQL服务器:找到偏离值的实例

SQL Server : find Instance of values that deviate

场景:我有多个账户的账单,存储在 SQL 服务器数据库中,持续了几个月。

AccountNum     BillNum      BillMonth   BillTotal       
---------------------------------------------------
123456         123456-1      201601     0000.00    
123456         123456-2      201602     0000.00    
123456         123456-3      201603     0000.00    
123456         123456-4      201604     0000.00    
456789         456789-1      201601     0000.00    
456789         456789-2      201602     0000.00    
456789         456789-3      201603     0000.00    
456789         456789-4      201604     0000.00    

我正在尝试编写一个查询,该查询将显示 outliers/deviations 在给定时间段内相差 > xx%。因此,在上面的数据集中,第 4 行和第 8 行与我认为的 "normal" 100,000 美元 p/month 的金额有很大不同 p/month,这可能表明存在问题。

我需要一种方法来按帐户平均账单(因为每个帐户都有不同的 bill/charges 等)并找出给定月份的偏差超过 10% 的地方。

我尝试过使用 STDEV,但无法完全解决。

您可以尝试使用以下查询:

SELECT AccountNum, BillNum, BillMonth, BillTotal,
       CASE 
          WHEN ABS(BillTotal - AVG(BillTotal) OVER (PARTITION BY AccountNum)) > 
               STDEV(BillTotal) OVER (PARTITION BY AccountNum)
          THEN 1
          ELSE 0
       END AS deviates
FROM mytable

上面的查询 returns a 1 那些记录的 BillTotal 金额与特定 [=13] 字段的平均值的偏差大于标准偏差=].