使用设备开/关状态更改创建时间线

时间:2012-11-20 10:18:45

标签: mysql excel timeline

我有一张表格,其中包含设备开启和关闭的日期/时间列表。这被视为:

date-time   |  equipment id  | state (1 or 0)

我正在尝试创建一个时间轴,该时间轴显示设备何时作为线路或条形图运行时的状态,以及当它关闭时没有任何内容。 我对SQL没有经验,所以我不知道如何处理这个问题。我可以尝试使用下一次状态更改的开始创建结束日期/时间,但我不确定这是否可以在MySQL中实现。 我曾尝试使用查询列表在excel中执行此操作,但它仅绘制为单个日期/时间点。我想我需要某种持续时间。我不知道该怎么办。 任何建议或指示将不胜感激。

1 个答案:

答案 0 :(得分:1)

CREATE TABLE `status` (
  `id` int(11) DEFAULT NULL,
  `date` datetime DEFAULT NULL,
  `state` int(11) DEFAULT NULL
)


set @last_date = NULL;
select @last_date as start_date,
  date as end_date,
  case when state = 1 then @last_date := date end as ignore_me,
  case when state = 0 then (unix_timestamp(date) - unix_timestamp(@last_date)) / 60 end as duration
from status
where id = 1
order by date

给你这样的输出:

+---------------------+---------------------+---------------------+----------+
| start_date          | end_date            | ignore_me           | duration |
+---------------------+---------------------+---------------------+----------+
| 2012-11-20 01:16:00 | 2012-11-20 01:00:00 | 2012-11-20 01:00:00 |     NULL |
| 2012-11-20 01:00:00 | 2012-11-20 01:15:00 | NULL                |  15.0000 |
| 2012-11-20 01:00:00 | 2012-11-20 01:16:00 | 2012-11-20 01:16:00 |     NULL |
| 2012-11-20 01:16:00 | 2012-11-20 01:20:00 | NULL                |   4.0000 |
+---------------------+---------------------+---------------------+----------+

只获取持续时间优秀的行:

select * from (
  ...
) foo
where duration is not null

+---------------------+---------------------+-----------+----------+
| start_date          | end_date            | ignore_me | duration |
+---------------------+---------------------+-----------+----------+
| 2012-11-20 01:00:00 | 2012-11-20 01:15:00 | NULL      |  15.0000 |
| 2012-11-20 01:16:00 | 2012-11-20 01:20:00 | NULL      |   4.0000 |
+---------------------+---------------------+-----------+----------+