Найти нерегулярные записи с помощью SQL

У меня есть записи о человеческих ошибках в моей таблице. Некоторым недостает нуля, у некоторых больше материала, чем должно быть, и так далее. Поэтому я пытаюсь выполнить сканирование по всей таблице, чтобы найти ошибку в группах записей. Таблица выглядит следующим образом:

| 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 не хватает данных, чтобы выбрать, какое число является нормальным числом, а какое число - нерегулярными числами, и мне нужно пометить их оба для проверки, и в этом случае уменьшение до процента не поможет,

Кроме того, если я уменьшу их до процентного значения по сравнению со средним, его распространение по-прежнему слишком велико, чтобы пометить один из них.

Есть идеи? Потому что я действительно застрял на этот раз.

1 ответ

Из статистической базы вы, вероятно, захотите начать с стандартной функции отклонения STDEV.

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

licensed under cc by-sa 3.0 with attribution.