mysql 某列值为0时,用最近一行的值更新
时间: 2024-03-13 20:46:08 浏览: 47
要实现将某列为0的行用最近一行的值进行更新的需求,可以使用MySQL中的UPDATE语句结合子查询和窗口函数来实现。以下是一个示例查询,假设我们的表名为`my_table`,要更新的列名为`my_column`,按照`id`升序排列:
```
UPDATE my_table
SET my_column = (
SELECT last_value
FROM (
SELECT id,
CASE WHEN my_column = 0
THEN LAST_VALUE(CASE WHEN my_column != 0 THEN my_column END IGNORE NULLS)
OVER (ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING)
ELSE my_column
END AS last_value
FROM my_table
) sub
WHERE sub.id = my_table.id
)
WHERE my_column = 0;
```
这个查询中首先进行子查询,用窗口函数获取每一行的填充值,然后将这个子查询作为一个表并进行连接,最后在UPDATE语句中使用WHERE子句筛选出需要更新的行,将填充值赋给这些行的`my_column`列。
请注意,由于窗口函数的使用,这个查询只能在MySQL 8.0及以上版本中运行。同时,如果表中存在大量需要更新的行,这个查询可能会比较耗时,请谨慎使用。
阅读全文