Найти медиану среди ближайших значений с помощью Oracle SQL - PullRequest
2 голосов
/ 03 июля 2019

У меня есть набор данных, который состоит из периодически собираемых значений.Я хочу вычислить медиану, используя 2 левых и правых соседа текущего значения для каждого элемента набора.

Например, набор:

21
22
23
-10
20
22
19
21
100
20

Для первого значения, которое мы выбираем21, 22, 23, медиана которых равна 22.Так что для 21 у нас есть 22.Для -10 имеем 22, 23, -10, 20, 22.Медиана равна 22.

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

SELECT (SELECT median(d.value)
          FROM my_set d
         WHERE d.key_val = s.key_val
           AND d.order_value BETWEEN s.order_value - 2 AND s.order_value + 2) median_val
      ,s.key_val
      ,s.order_value
  FROM my_set s

Я был бы рад увидеть любые другие подходы или некоторые улучшенные подходы для решения этого вопроса.

1 Ответ

1 голос
/ 03 июля 2019

Вы ничего не указали в структуре таблицы, поэтому я просто угадываю из вашего SQL, какие поля существуют и что они должны означать, но рассмотрим такую ​​попытку:

SELECT s1.key_val, s1.order_value, s1.value, MEDIAN(s2.value) as med
FROM my_set s1
LEFT OUTER JOIN my_set s2
  ON s2.key_val = s1.key_val
  AND (s1.order_value - 2) <= s2.order_value
  AND s2.order_value       <= (s1.order_value + 2)
GROUP BY s1.key_val, s1.order_value, s1.value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...