我有一组数据,其中包含定期收集的值。我想使用set的每个元素的当前值的2个左右邻居来计算中位数。
例如,集合为:
21
22
23
-10
20
22
19
21
100
20
对于我们选择的第一个值21
,22
,23
其中位数为22
。所以21
我们有22
。对于-10
我们有22
,23
,-10
,20
,22
。中位数为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
我很高兴看到任何其他方法或某些改进的方法可以解决此问题。
您没有为表结构指定任何内容,因此我只是从您的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
看起来如果不进行分析将是最简单的方法