sql-server - 使用 SSRS MAX 函数时消除一些大值
问题描述
我有许多表使用 SSRS 每天从每个表中的多行导入最大值。有时我们会得到一些异常读数,需要省略并使用下一个最大值。
例如:我有一个表格,其行中的值为“26,28,29,31,23,22,34,99999,27,20”。
所以最大值 = 99999,但我需要省略这个值,因为这是异常值并且需要将最大值设为 34。
SSRS有什么方法可以做吗?
或者只是找出第二高值的解决方案?
解决方案
一种选择是创建Normalized Numbers。
只是为了验证结果,归一化数的总和应该为零 +/- 一些精度。
例子
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 中运行查询,这就是您所看到的
推荐阅读
- c++ - C++ SFML 加载图片失败,原因:无法打开文件
- c++ - std::unique_ptr reset() 操作顺序
- python - 使用带有 Tensorflow 的 Iris 数据集的值误差和维度问题
- laravel - 如何强制我的应用使用 Goutte 而不是 Symfony?
- r - github 操作中的 Spotify 身份验证
- python-3.x - Python selenium 从 href 元素获取文本
- docker - docker-compose 未在 WSL 内的 Ubuntu 上读取环境变量
- azure-cognitive-search - 通过最小 search.score() 限制 Azure 搜索结果
- c# - 从列表中获取数据到 datagridview
- apache - 是否可以在中指定“SSLVerifyClient”
?