Mysql 查找未连续存储的SQL记录之间的差异

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

我有一个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 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