Sql server 在SQL Server表中查找数据漂移

Sql server 在SQL Server表中查找数据漂移,sql-server,sql-server-2012,Sql Server,Sql Server 2012,我有一个包含以下字段的SQL Server表: Id int PName varchar(30) PValue decimal(10,2) 一旦数据加载到此表中,我想对“PValue”运行一个查询,它是十进制类型,应该给出漂移值。请仔细阅读下面的示例数据 Id PName Pvalue 1 A 15.2 2 A 15.8 3 A 17.9 4 A 14.2 5 A 21.0 6 A 53.2

我有一个包含以下字段的SQL Server表:

Id int
PName varchar(30)
PValue decimal(10,2)
一旦数据加载到此表中,我想对“PValue”运行一个查询,它是十进制类型,应该给出漂移值。请仔细阅读下面的示例数据

Id   PName  Pvalue 
1     A     15.2
2     A     15.8
3     A     17.9
4     A     14.2
5     A     21.0
6     A     53.2
7     A     14.4
8     A      1.6
9     A     16.8
现在我希望查询返回

6     A     53.2
8     A      1.6
与以前的记录和以后的记录相比,价值的突然上升或下降。
请帮助提供SQL查询以获取此类数据。

您需要做的是利用SQL Server内置的R或Perl语言,并在概述时运行查询以确定数据漂移。演示如何使用R查找数据中的异常值


在您的例子中,您看到的是最小值和最大值,因此您希望在本文中结合这两个示例。

如果必须在SQL中执行此操作,您可以执行以下操作:

SELECT id, PName, PValue,
       CASE 
          WHEN ABS(PValue - AVG(PValue) OVER (PARTITION BY PName)) > 
               STDEV(PValue) OVER (PARTITION BY PName)
          THEN 1
          ELSE 0
       END AS deviates
FROM #TEST
其中#Test是您的示例数据

CREATE TABLE #TEST (Id int,
                    PName varchar(30),
                    PValue decimal(10,2))

INSERT INTO #TEST (id,PName,PValue) 
VALUES (1,'A',15.2),
(2,'A',15.8),
(3,'A',17.9),
(4,'A',14.2),
(5,'A',21.0),
(6,'A',53.2),
(7,'A',14.4),
(8,'A', 1.6),
(9,'A',16.8)
它显示了偏离平均值超过1个标准偏差的位置


如果您需要更具体地定义“漂移”是什么,其他选项可以是编写.net CLR函数,这可能会给您带来更大的灵活性。

您的示例中没有任何东西可以提供这两个记录有什么特殊之处的线索。您能给我们更多关于您的问题的详细信息吗?这不是最小值和最大值,我想找出与前一个记录值和下一个记录值相比异常的记录。我使用dotnet作为编程语言,所以这里不能使用R或Perl。如果可能的话,我需要一个SQL查询。我说的是最小值和最大值,但最小值和最大值作为超出标准偏差的异常值,高于或低于标准偏差。这就是你要找的。检查文章。