使用Oracle SQL查找最接近的值中的中位数

时间:2019-07-03 13:51:54

标签: sql oracle

我有一组数据,其中包含定期收集的值。我想使用set的每个元素的当前值的2个左右邻居来计算中位数。

例如,集合为:

21
22
23
-10
20
22
19
21
100
20

对于第一个值,我们选择212223,中位数为22。因此,对于21,我们有22。对于-10,我们有2223-102022。中位数为22

我使用此方法来消除此集合中异常的“偏差”值。

我想我应该以某种方式使用median分析函数。像这样:

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 个答案:

答案 0 :(得分:1)

您没有为表结构指定任何内容,因此我只是从您的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