Z-счет в SQL на основе последнего 1 года - PullRequest
0 голосов
/ 19 марта 2020

У меня есть ежедневные данные, структурированные в следующем формате. Обратите внимание, что это только часть данных, и мне пришлось внести некоторые изменения, чтобы иметь возможность поделиться ими.

Первый столбец - это [DataValue], для которого мне нужно найти Z-счет по IndexValue, [Qualifier], [QualifierCode] и [QualifierType]. У меня также есть столбец [Дата] там.

Мне необходимо найти значение Z-показателя для каждой точки данных по IndexValue, [Qualifier], [QualifierCode] и [QualifierType]. Основное внимание здесь уделяется тому, что у меня есть данные за последние 3 года, но для расчета Z-показателя я хочу взять только среднее и стандартное отклонение за последний год.

Z-Score = [DataValue] - (среднее значение за последний 1 год) / (стандартное отклонение за последний 1 год)

Я борюсь с тем, как получить среднее значение за последний год. Кто-нибудь сможет мне помочь с этим?

SELECT [IndexValue]
  ,[Qualifier]
  ,[QualifierCode]
  ,[QualifierType],[Date]
  ,[Month]
  ,[Year]
  ,[Z-Score] = ([DataValue] - ROUND(AVG([DataValue]),3))/ ROUND(STDEV([DataValue]),3)
  FROM [TABLEA] 
   GROUP BY [IndexValue]
  ,[Qualifier]
  ,[QualifierCode]
  ,[QualifierType]
  ,[Date]
  ,[Month]
  ,[Year]
  order by [IndexValue]
  ,[Qualifier]
  ,[QualifierCode]
  ,[QualifierType]
  ,[Date] desc

: https://i.stack.imgur.com/pqhJD.png

1 Ответ

0 голосов
/ 19 марта 2020

Для этого вам нужны оконные функции:

SELECT a.*,
       ( (DataValue - AVG(DataValue) OVER ()) /
         STDEV(DataValue) OVER ()
       ) as z_score
FROM [TABLEA] a;

Примечание: если data_value является целым числом, вам необходимо преобразовать его в число с цифрами:

SELECT a.*,
       ( (DataValue - AVG(DataValue * 1.0) OVER ()) /
         STDEV(DataValue) OVER ()
       ) as z_score
FROM [TABLEA] a;

Похоже, что округление для вычисления далеко от основания, если только вы не намерены получить z-подобный счет, который на самом деле не является z-счетом.

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