2016-04-27 58 views
1

我有一個像下面的MySQL +持續時間根據狀況

---------------------------------------------------- 
| NodeID   | Status | Time    | 
---------------------------------------------------- 
| 101    | Up  |2016-04-27 10:00:35 | 
---------------------------------------------------- 
| 101    | Down |2016-04-27 10:43:12 | 
---------------------------------------------------- 
| 101    | Up  |2016-04-27 11:05:48 | 
---------------------------------------------------- 
| 156    | Up  |2016-04-27 08:17:10 | 
---------------------------------------------------- 
| 156    | Up  |2016-04-27 08:56:30 | 
---------------------------------------------------- 
| 156    | Down |2016-04-27 09:06:12 | 
---------------------------------------------------- 

我試圖讓可用性(時間%時,每一個應用程序是向上)的數據集。 該表不能有自動增量字段,因爲記錄將使用計劃作業連續刪除。

我用行號和自我試圖加入讓旁邊記錄作爲時間差爲每行:

SELECT A.NodeId, A.Status, TIMESTAMPDIFF(MINUTE,A.time,B.time) AS timedifference 
FROM (

SELECT @row_number:[email protected]_number+1 AS row_number,nodeId, status, time FROM sw_node_status, 
(SELECT @row_number:=0) AS t) as A 

INNER JOIN 
(
SELECT @row_number:[email protected]_number+1 AS row_number,nodeId, status, time FROM sw_node_status, 
(SELECT @row_number:=0) AS t 
) as B ON B.row_number = (A.row_number + 1) 
ORDER BY A.NodeId ASC 

但需要較長的時間來運行,給我回來只有一個記錄。 預期結果將是爲:


| NodeID   | Status | Time    | Duration (mins 
---------------------------------------------------------------- 
| 101    | Up  |2016-04-27 10:00:35 | 43 
---------------------------------------------------------------- 
| 101    | Down |2016-04-27 10:43:12 | 23 
---------------------------------------------------------------- 
| 101    | Up  |2016-04-27 11:05:48 | 0 
---------------------------------------------------------------- 
| 156    | Up  |2016-04-27 08:17:10 | 39 
---------------------------------------------------------------- 
| 156    | Up  |2016-04-27 08:56:30 | 10 
---------------------------------------------------------------- 
| 156    | Down |2016-04-27 09:06:12 | 0 
---------------------------------------------------------------- 
+0

什麼可以預期在給定的例子輸出? – Utsav

回答

0
SELECT @prev_time:=time, 
     nodeId, status, time, 
     TIMESTAMPDIFF(MINUTE,A.time,@prev_time) AS timedifference 
FROM sw_node_status, (SELECT @prev_time:=some_initial_time) as init