我有一个数据库,用于存储从不同传感器读取的数据。该表如下所示:
[传感器 ID][时间戳 MS][值][传感器 1][123420][10]
[传感器 1][123424][15]
[传感器 1][123428][6554]
[传感器 1][123429][20]
我想做的是:有些读取已损坏(数字为 6554),我想用下一个未损坏的值更新它(在下面显示的示例中为 20) .所以,如果一个数字是 6554,我想用下一个未损坏的值(在时间戳记中)更新它。
我正在考虑用 PHP 执行此操作,但我想知道是否可以直接使用 SQL 脚本执行此操作。
感谢 :)
最佳答案
您可以使用相关子查询...
UPDATE
myTable
SET
value = (SELECT value FROM myTable AS NextValue WHERE sensorID = myTable.SensorID AND timestampMS > myTable.timestampMS ORDER BY timestampMS ASC LIMIT 1)
WHERE
value = 6554
子查询得到以下所有结果,按timestampMS排序,只取第一个;这是该 SensorID 的下一个值。
注意:如果不存在“下一个”值,它将尝试使用 NULL 值进行更新。要解决这个问题,您可以将其添加到 WHERE 子句中...
AND EXISTS (SELECT value FROM myTable AS NextValue WHERE sensorID = myTable.SensorID AND timestampMS > myTable.timestampMS ORDER BY timestampMS ASC LIMIT 1)
编辑
或者,为了更短,只需使用 IFNULL(<sub_query>, value)
...
关于php - 使用数据库中已有的值更新数据库的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5392243/