mysql 表dr_1_jh_collection_localdata 列tag_value值为0时,用具有相同point_id值的上一行值进行更新
时间: 2023-08-13 21:02:33 浏览: 47
你可以使用以下SQL语句来实现你的需求:
```
UPDATE dr_1_jh_collection_localdata t1
JOIN (
SELECT point_id, MAX(create_time) AS max_time
FROM dr_1_jh_collection_localdata
WHERE tag_value <> 0
GROUP BY point_id
) t2 ON t1.point_id = t2.point_id
SET t1.tag_value = (
SELECT tag_value
FROM dr_1_jh_collection_localdata
WHERE point_id = t1.point_id AND create_time < t2.max_time
ORDER BY create_time DESC
LIMIT 1
)
WHERE t1.tag_value = 0;
```
这个SQL语句会先找到每个point_id的最近一个有效值(tag_value不为0),然后利用JOIN操作将这些最近有效值与tag_value为0的行连接起来,最后利用子查询将tag_value为0的行更新为它们对应的上一个有效值。
相关问题
mysql 表dr_1_jh_collection_localdata 列tag_value值为0时,用具有相同point_id值的上一个有效值进行更新
你可以使用以下SQL语句来实现你的需求:
```
UPDATE dr_1_jh_collection_localdata t1
JOIN (
SELECT point_id, MAX(create_time) AS max_time
FROM dr_1_jh_collection_localdata
WHERE tag_value <> 0
GROUP BY point_id
) t2 ON t1.point_id = t2.point_id
SET t1.tag_value = (
SELECT tag_value
FROM dr_1_jh_collection_localdata
WHERE point_id = t1.point_id AND create_time = t2.max_time
)
WHERE t1.tag_value = 0;
```
这个SQL语句会先找到每个point_id的最近一个有效值(tag_value不为0),然后利用JOIN操作将这些最近有效值与tag_value为0的行连接起来,最后利用子查询将tag_value为0的行更新为它们对应的最近有效值。
mysql 某列值为0时,用最近一行有同样parant_id的对应值更新
要实现将某列为0的行用同一parent_id的最近一行对应值进行更新的需求,可以使用MySQL中的UPDATE语句结合子查询和窗口函数来实现。以下是一个示例查询,假设我们的表名为`my_table`,包含一个`parent_id`列和一个要更新的`my_column`列,按照`id`升序排列:
```
UPDATE my_table
SET my_column = (
SELECT last_value
FROM (
SELECT id,
parent_id,
CASE WHEN my_column = 0
THEN LAST_VALUE(CASE WHEN my_column != 0 THEN my_column END IGNORE NULLS)
OVER (PARTITION BY parent_id 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;
```
这个查询中的窗口函数使用了`PARTITION BY parent_id`语句,表示按照`parent_id`列分组,然后在每个分组内使用`ORDER BY id`语句按照递增的`id`值排序,获取每个分组内前一行的非零值。最后在UPDATE语句中使用WHERE子句筛选出需要更新的行,将填充值赋给这些行的`my_column`列。
请注意,由于窗口函数的使用,这个查询只能在MySQL 8.0及以上版本中运行。同时,如果表中存在大量需要更新的行,这个查询可能会比较耗时,请谨慎使用。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)