2012-03-14 36 views
1

比如我在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

回答

0
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

0

如果你想計算的總時間的車被關閉授予「名單關閉「和」打開「時間戳,您需要按升序排列這些時間戳,然後通過計算關閉&之間的時間間隔的總和來計算總關閉時間。

這可以通過使用一些編程語言來遍歷offs和ons的有序(按時間)列表來完成。遇到「關閉」時,獲取該「關閉」發生和下一個「開啓」發生之間的時間。這些時間的總和就是你的總休息時間。或者您可以輸出這些迭代時間,然後在每次「關閉」發生後,您就可以看到汽車關閉的時間。

+0

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

0

這會給每行有效的時間 -

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; 

藉此任何進一步的,我們大約需要設定您所需要的結果的更多細節。