使用SQL查找不规则条目

时间:2013-09-02 10:22:15

标签: sql sql-server filtering aggregate-functions

我的表中有一些人为错误条目。有些人缺少零,有些人的材料比应有的多,等等。所以我试图在整个表中扫描以查找条目组中的一些错误。 表格如下:

| Work Order | Product | Material Qty
---------------------------------
| 1          | Item A  | 10
| 2          | Item A  | 25
| 3          | Item A  | 12
| 4          | Item A  | 9
| 5          | Item X  | 52
| 6          | Item X  | 20
| 7          | Item X  | 23
| 8          | Item X  | 24
| 9          | Item X  | 2
| 10         | Item Z  | 20
| 11         | Item Z  | 5
---------------------------------

现在,WO和WO项目不是顺序的,我只是为了举例而在此处将其写为顺序。

正如您所看到的,那些项目A应该有10左右的数字,给予或采取一些。项目X应该在22左右,给出或取一些,同时查询应该将项目Z标记为全部可疑,因为没有足够的数据来关联。所以我需要隔离第2,5和9,10和11号WO,供人们审核。知道怎么样?

我一直在尝试创建它们的平均值,并使用百分比来消除它们。但有时,百分比数字变化太大。并且在项目Z的情况下,没有足够的数据来选择哪个数字是正常数字,哪个数字是不规则数字,我需要标记它们以进行验证,在这种情况下,减少百分比将无济于事。

此外,如果我将它们减少到变量百分比与平均值,它的差异仍然太宽,无法标记其中一个。

有什么想法吗?因为这次我真的被困住了。

1 个答案:

答案 0 :(得分:2)

从统计学角度来看,您可能希望从STDEV standard deviation函数开始。

select * 
from

(       
select *,
   AVG(qty) OVER( Partition by product) av,
   STDEV(qty) OVER( Partition by product) sd,
   COUNT(*) over (Partition by product) c
 from yourtable
) v
where ABS(qty-av)>sd or c<3