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

时间:2011-01-26 16:16:23

标签: 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 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的临时表,然后从该表中进行类似的选择。如果可能,对单个查询解决方案感兴趣。

2 个答案:

答案 0 :(得分:3)

SELECT  @ptotal - etotal, @ptotal := etotal
FROM    solars
WHERE   created_at >= CURDATE() 
        AND addr = 245
ORDER BY
        created_at, id

在处理结果时忽略第二列或将其包装到嵌套查询中(虽然它可能稍慢):

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

(addr, created_at, id)上创建一个复合索引,以便快速工作。

还应支持柴油发电机(未经测试)。

答案 1 :(得分:0)

你能不能说出来 WHERE t1.created_at = t2.created_at

或者我不明白你的问题:$