如何计算时间,发动机和关闭在MySQL

问题描述:

比如我在MySQL 8个DATAS ...如何计算时间,发动机和关闭在MySQL

id  car  time        engine 
1  BMW  2012-02-25 04:00:00    off 
2  BMW  2012-02-25 04:02:44    on 
3  BMW  2012-02-25 04:06:22    off 
4  BMW  2012-02-25 04:10:11    off 
5  BMW  2012-02-25 04:15:00    on 
6  BMW  2012-02-25 04:20:00    on 
7  BMW  2012-02-25 04:25:00    off 
8  BMW  2012-02-25 04:30:00    off 

我要输出的数据是这样的:

汽车发动机关闭:2012- 02-25 04:00:00发车时间:00:02:44
停车发动机:2012-02-25 04:06:22时间:00:03:49
停车发动机:2012-02-25 04 :25:00持续时间:00:05:00

i co nfused如何计算我关闭发动机的时间在我的数据......请帮我解决我的proble ...

+2

你是否想总结你的引擎时间? – Teja 2012-03-14 14:16:06

+1

你的数据模型不清楚。每行代表引擎状态的_sample_还是特定的转换? – Alnitak 2012-03-14 14:21:34

+0

准确定义你想要计算的时间。另外,你有什么尝试? – 2012-03-14 14:22:19

SELECT CONCAT('car off engine',A.time,'duration :',SEC_TO_TIME(UNIX_TIMESTAMP(A.time)-UNIX_TIMESTAMP(B.time))) 
FROM 
(SELECT * FROM data WHERE engine='on' ORDER BY time) A, 
(SELECT * FROM data WHERE engine='off' ORDER BY time) B 
WHERE A.id+1=B.id; 
+0

你是认真的吗? – 2012-03-14 14:17:43

+0

没有..没有..我正在输入这个答案...并由于某种原因离开了我的办公桌..当我回来时,它得到张贴并收到两张倒票... :) – Teja 2012-03-14 14:26:32

+1

那么,什么阻止你从编辑它? – 2012-03-14 14:32:09

如果你想计算的总时间的车被关闭授予“名单关闭“和”打开“时间戳,您需要按升序排列这些时间戳,然后通过计算关闭&之间的时间间隔的总和来计算总关闭时间。

这可以通过使用一些编程语言来遍历offs和ons的有序(按时间)列表来完成。遇到“关闭”时,获取该“关闭”发生和下一个“开启”发生之间的时间。这些时间的总和就是你的总休息时间。或者您可以输出这些迭代时间,然后在每次“关闭”发生后,您就可以看到汽车关闭的时间。

+0

这不是mysql的答案 – 2016-02-24 19:56:27

这会给每行有效的时间 -

SELECT d1.*, SEC_TO_TIME(UNIX_TIMESTAMP(d2.time)-UNIX_TIMESTAMP(d1.time)) AS duration 
FROM data d1 
INNER JOIN data d2 
    ON d1.id + 1 = d2.id 
ORDER BY d1.id ASC; 

借此任何进一步的,我们大约需要设定您所需要的结果的更多细节。