我有一个表,其中列名称为“id”、“time”、“value” 当“值”为空时,我希望它是该 id 上“时间”列的最近邻居之间的平均值
我的问题正是此处描述的 select nearest neighbours ,但答案没有解释如何找到对另一列有限制的最近邻居(id 应该相同)
示例: 第二行缺少“值”
id | time | value
-------------------------
11111 | 1 | 5.0
11111 | 10 |
22222 | 7 | 32.6
33333 | 11 | 15.88
11111 | 15 | 20.0
我希望它是:
id | time | value
-------------------------
11111 | 1 | 5.0
11111 | 10 | 12.5*
22222 | 7 | 32.6
33333 | 11 | 15.88
11111 | 15 | 20.0
为 (20.0 + 5.0)/2 = 12.5
在MySQL中如何获取?
最佳答案
假设 time
定义顺序并且是唯一的(为此需要唯一的列和定义顺序的列),一种方法是使用子查询获取顶部(底部)使用
。ORDER BY
和 LIMIT
计算具有较小(较大)时间
的记录的值
SELECT t1.id,
t1.time,
coalesce(t1.value,
((SELECT t2.value
FROM elbat t2
WHERE t2.id = t1.id
AND t2.time < t1.time
ORDER BY t2.time DESC
LIMIT 1)
+
(SELECT t2.value
FROM elbat t2
WHERE t2.id = t1.id
AND t2.time > t1.time
ORDER BY t2.time ASC
LIMIT 1)
)
/
2) value
FROM elbat t1;
但这只能填补一行宽的空白。如果存在更大的间隙,您必须定义这些行的下一个非空邻居是什么。
关于mysql - 用邻居值之间的平均值填充空值,并限制另一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55434425/