2011-01-26 115 views
1

我有一個MYSQL表,用於存儲我家中太陽能發電的數據。我有兩個逆變器設備,包括本表中的數據。爲了簡化,我的表結構(有說明)的相關部分是一樣的東西:查找未連續存儲的SQL記錄之間的差異

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的臨時表,然後在該表中做類似的選擇。如果可能的話,對單個查詢解決方案感興趣。

+0

+1使用太陽能。 – Quassnoi 2011-01-26 16:29:01

回答

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)上創建一個複合索引,以便快速工作。

還應該支持柴油發電機(未測試)。

+0

+1支持柴油發電機組。 :-) – 2011-01-26 16:28:15

0

難道你只是說
WHERE t1.created_at = t2.created_at

或者我不明白你的問題:$