Один из вариантов - создать нормализованные числа .
Просто для проверки результатов сумма нормализованного числа должна быть равна нулю +/- некоторая точность.
Пример
Declare @YourTable Table ([SomeVal] int)
Insert Into @YourTable Values
(26)
,(28)
,(29)
,(31)
,(23)
,(22)
,(34)
,(99999)
,(27)
,(20)
;with cte as (
Select *
,NormNbr=([SomeVal]-avg([SomeVal]) over()) / stdev([SomeVal]) over()
From @YourTable
)
Delete from cte where abs(NormNbr)>1 -- You may want to tweak as needed
Select * from @YourTable
Обновленная таблица -
SomeVal
26
28
29
31
23
22
34
27
20
ИЛИ если вы НЕ хотите удалять аномальные строки
;with cte as (
Select *
,NormNbr=([SomeVal]-avg([SomeVal]) over()) / stdev([SomeVal]) over()
From @YourTable
)
Select MaxValue = max([SomeVal])
From cte
Where abs(NormNbr)<=1
Возвращает
MaxValue
34
РЕДАКТИРОВАТЬ: если бы вы выполняли запрос в CTE, это то, что вы бы см.
введите описание изображения здесь