我的桌子看起来像这样:
id_sensor | date_in | value | cons
我有一个(几乎)有效的查询:
UPDATE ow_data D,ow_data X
SET D.cons = X.value
WHERE D.id_sensor=14 AND X.id_sensor=D.id_sensor AND X.date_in>D.date_in
这可以使cons从下一条记录中接收值,因为记录按date_in升序排列。
但是我想要的是用先前记录的值来更新cons。
但是,如果我改为X.date_in < D.date_in,则cons总是从第一条记录中接收值,显然是因为它在X中排在第一位
我在X上尝试了ORDER BY,但似乎不允许这样做。
更新
原来我自己解决了:
UPDATE ow_data D
LEFT JOIN (SELECT * FROM ow_data
WHERE id_sensor=14 GROUP BY date_in ORDER BY date_in DESC) X
ON D.date_in > X.date_in
SET D.cons = X.value WHERE D.id_sensor=14
这是在黑暗中拍摄的镜头,因为我从来没有遇到过必须这样做的情况,但是您可以这样做吗?
UPDATE ow_data D
SET D.cons = (select X.value from ow_data X where X.date_in < D.date_in and X.id_sensor = 14 order by X.date_in desc limit 1)
WHERE D.id_sensor=14;
我的示例删除了您的X.id_sensor = D.id_sensor
条件,因为如果ID已知,您也可以直接检查一下。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句