我有两个桌子。第一个包含有关传感器的数据(组,名称,最新更新等)。第二个是所有传感器的读数。
我现在要检查传感器的最新更新是否在不久之前,如果是,则将空值插入该传感器的读数表中。
我尝试了一些IF语句,但是没有运气。我应该去INSERT和“ where IN()”吗?
答案 0 :(得分:1)
您走对了路。它实际上是带有WHERE子句的INSERT 因此,您需要在Readings表中为过去X天(在我的示例中为10天)具有UPDATE的传感器创建一条记录。
类似:
insert into readings
select 1 as id, id as sens_id, null as info
from sensors
where datediff(now(),latest_update) > 10;
在我的示例中,我提供了一个ID,但我假设它是BD中的一个自动递增整数...
然后更新UPDATE字段...
update sensors set latest_update = now()
where datediff(now(),latest_update) > 10;
去,自己尝试一下...
https://www.db-fiddle.com/f/u1EWRpH7nbxHEjwBDUgwLh/0
更新:
https://www.db-fiddle.com/f/u1EWRpH7nbxHEjwBDUgwLh/1
如果为last_update编制了索引,我建议改为:
where date_add(now(),INTERVAL -10 DAY) > latest_update;
从索引中受益。
“当将函数包装在索引列周围时,SQL Server必须为表中的每一行计算该函数的值。当您只将索引列与标量值或函数的结果进行比较时,SQL Server可以使用该值搜索索引。”
不确定确切是否适用于MySQL,因为在这种情况下我没有对其进行测试,但是请确保:)
https://www.sqlteam.com/articles/avoid-enclosing-indexed-columns-in-a-function-in-the-where-clause