mysql - 用邻居值之间的平均值填充空值,并限制另一列

标签 mysql sql partition-by

我有一个表,其中列名称为“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 BYLIMIT 计算具有较小(较大)时间的记录的值

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;

db<>fiddle

但这只能填补一行宽的空白。如果存在更大的间隙,您必须定义这些行的下一个非空邻居是什么。

关于mysql - 用邻居值之间的平均值填充空值,并限制另一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55434425/

相关文章:

mysql - ion_auth 与另一个表连接的事件记录/方法

sql - 如何在函数中传递参数数量以在 IN 子句中使用 Postgresql

sql - 提高搜索性能

mysql - 从库存中获取可用设备的 SQL 语句

MySQL 查询更新除最新行之外的所有 "duplicate"行

mysql - MariaDB 服务器版本中触发器中 If 条件使用的正确语法

mysql - 根据列中的正整数或负整数对 MySQL 表进行排序

Php 显示资源 ID 和错误

group-by - groupby 并在 pyspark 中加入 vs 窗口

r - 第n组标签(仅计算新组的毕业生)