温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - Find a median among the nearest values using Oracle SQL
oracle sql

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

发布于 2020-03-27 10:45:46

我有一组数据,其中包含定期收集的值。我想使用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

我很高兴看到任何其他方法或某些改进的方法可以解决此问题。

查看更多

查看更多

提问者
Roman
被浏览
168
JimmyB 2019-07-04 17:22

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