如何计算两行之间的差异

时间:2018-01-29 10:42:23

标签: mysql influxdb

我有一个名为serverstatus的db表,它存储时间和状态,如下所示。在任何给定时间我应该如何找到总的停机时间?

Time Status
10:00 UP
11:30 DOWN
12:00 UP
14:00 DOWN
15:00 UP

例如,在16:00,总停机时间为1小时30分钟。我尝试在两个连续的行之间进行自连接和减法,但无法得到正确的答案

Select A.time-min(B.time) from serverstatus A, serverstatus B where A.status="UP" and B.status="DOWN" and B.time < A.time

1 个答案:

答案 0 :(得分:1)

如果您的mysql版本中没有row_number函数,则可以使用行号模拟执行此操作

select  #s.*,t.*,timediff(endtime,starttime) duration
            sec_to_time(sum(time_to_sec(timediff(endtime,starttime))) / 60) Downduration
from
(
select  t.time starttime,t.status,@rn:=@rn+1 rn,
            @p:=status p
from t,(select @rn:=0,@p:='') r
order by time
) s
join
(
select  t.time endtime,t.status,@rn1:=@rn1+1 rn1,
            @p1:=status p1
from t,(select @rn1:=0,@p1:='') r1
order by time
) t on t.rn1 = s.rn + 1
where s.status = 'Down' and t.status = 'Up'

+---------------+
| Downduration  |
+---------------+
| 00:01:30.0000 |
+---------------+
1 row in set (0.00 sec)
相关问题