Mysql 查找未连续存储的SQL记录之间的差异
我有一个MYSQL表,用于存储我家太阳能发电的数据。我正在轮询两个逆变器设备,它们构成了下表中的数据。为了简化,我的表结构的相关部分(包括说明)如下所示:Mysql 查找未连续存储的SQL记录之间的差异,mysql,Mysql,我有一个MYSQL表,用于存储我家太阳能发电的数据。我正在轮询两个逆变器设备,它们构成了下表中的数据。为了简化,我的表结构的相关部分(包括说明)如下所示: id <auto_increment> addr <int address of the inverter> etotal <total generation since the device has been online> SELECT (t2.etotal - t1.etotal) AS eperi
id <auto_increment>
addr <int address of the inverter>
etotal <total generation since the device has been online>
SELECT (t2.etotal - t1.etotal) AS eperiod
FROM solars AS t1, solars AS t2
WHERE t1.id+2 = t2.id AND t1.created_at >= CURDATE()
AND t1.addr = 245 AND t2.addr = 245 ORDER BY t1.id;
然而,这并不总是如预期的那样起作用,而且这似乎是一个糟糕的选择。我唯一的另一个想法是选择一个id自动递增的临时表,然后从该表中进行类似的选择。如果可能的话,对单一查询解决方案感兴趣。你就不能说其中t1.created_at=t2.created_at
或者我不明白你的问题:$
SELECT @ptotal - etotal, @ptotal := etotal
FROM solars
WHERE created_at >= CURDATE()
AND addr = 245
ORDER BY
created_at, id
在处理结果时忽略第二列,或将其包装到嵌套查询中(尽管速度可能稍慢):
在(addr,created_at,id)
上创建一个复合索引,以便快速运行
还应支持柴油发电机(未经测试)。这基本上可以按所列方式工作,但出于我的需要,第一列必须是etotal-@ptotal。非常感谢。
SELECT diff
FROM (
SELECT @ptotal - etotal AS diff, @ptotal := etotal
FROM solars
WHERE created_at >= CURDATE()
AND addr = 245
ORDER BY
created_at, id
) q