根据日期用以前的记录更新列

约翰·约翰22

我的桌子看起来像这样:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章