2记录时间戳sql之间的区别

时间:2017-06-20 11:09:07

标签: mysql 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

我应该写哪个查询?

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:1)

你可以试试这个

1)使用join选择下一个连续日的值。

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