Найдите дрейф данных в SQL таблице сервера - PullRequest
0 голосов
/ 09 июля 2020

У меня есть таблица SQL Server со следующими полями:

Id int
PName varchar(30)
PValue decimal(10,2)

После загрузки данных в эту таблицу я хотел запустить запрос на «PValue», который является десятичным типом, который должен давать значения дрейфа. Пожалуйста, go через следующий пример данных

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 запрос, чтобы получить этот тип данных.

Ответы [ 2 ]

1 голос
/ 09 июля 2020

Если вам нужно сделать это в SQL, вы можете сделать что-то вроде ths;

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 стандартное отклонение от среднего значения. даст вам большую гибкость.

0 голосов
/ 09 июля 2020

Что вам нужно сделать, так это воспользоваться преимуществами языков R или Perl, встроенными в SQL Server, и выполнить запросы, чтобы определить дрейф данных по мере вашего наброска. Вот статья о SQLTips , показывающая, как найти выбросы в данных с помощью R.

В вашем случае вы смотрите как на минимальное, так и на максимальное значение, поэтому вам нужно объединить два примера в статье.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...