【问题标题】:Find out irregular entries with SQL使用 SQL 查找不规则条目
【发布时间】:2013-09-02 19:13:10
【问题描述】:

我的表中有一些人为错误条目。有些缺少零,有些材料比应有的要多,依此类推。所以我试图扫描整个表以在条目组中找到一些错误。 表格是这样的:

| 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 标记为所有可疑,因为没有足够的数据进行关联。所以我需要隔离 WO 编号 2、5 和 9、10 和 11 以供人们审核。知道怎么做吗?

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

另外,如果我将它们降低到相对于平均值的变异百分比,它的分布仍然太宽而无法标记其中之一。

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

【问题讨论】:

    标签: sql sql-server filtering aggregate-functions


    【解决方案1】:

    从统计的角度来看,您可能希望从 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-27
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-22
      • 1970-01-01
      • 2010-10-22
      相关资源
      最近更新 更多