2017-06-20 32 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。 。 。然后'只选择'那个表达式。 –