2017-06-20 53 views
0

差異化的2條記錄時間戳SQL

CREATE TABLE result (
    id bigint(20) NOT NULL AUTO_INCREMENT, 
    tag int(11) NOT NULL, 
    timestamp timestamp NULL DEFAULT NULL, 
    value double NOT NULL, 
    PRIMARY KEY (id), 
    UNIQUE KEY nasudnBBEby333412dsa (timestamp, tag) 
) ENGINE=InnoDB AUTO_INCREMENT=115 DEFAULT CHARSET=utf8mb4; 

我想計算連續兩天有相同的列標籤之間的差異。例如,在時間戳:

| 1 | 1 | 2017-06-18 00:00:00 | 7.3 | 
| 2 | 1 | 2017-06-17 00:00:00 | 7.4 | 

我要的結果是:-0.1

要我寫哪個查詢?

+0

詳細說明你期待什麼?你怎麼得到0.1? – Manihtraa

回答

1

你可以試試這個

1)使用加入到選擇下一連續兩天的價值。

2)然後計算差異

SELECT r1.id, r1.tag, r1.value AS CURRENT_VALUE, r2.value AS NEXT_VALUE, (
r1.value - r2.value 
) AS DIFF, r1.timestamp 
FROM `result` r1 
LEFT JOIN result r2 ON r2.tag=r1.tag AND r2.`timestamp` = r1.`timestamp` + INTERVAL 1 
DAY WHERE r2.value IS NOT NULL 
GROUP BY r1.timestamp 

輸出

enter image description here

+0

如果我只想顯示差異? –

+0

然後選擇僅在選擇 – user1234

+0

DIFF我不明白 –

1

首先,如果你想存儲日期值,你可以使用date,所以沒有時間分量。

其次,你可以用join做到這一點:

select r.*, (r.value - rprev.value) as diff 
from results r left join 
    results rprev 
    on r.tag = rprev.tag and 
     r.timestamp = rprev.timestamp + interval 1 day; 
+0

如果我只想顯示差異? –

+0

@ peppe71-19。 。 。然後'只選擇'那個表達式。 –