我有一张表格,其中包含设备开启和关闭的日期/时间列表。这被视为:
date-time | equipment id | state (1 or 0)
我正在尝试创建一个时间轴,该时间轴显示设备何时作为线路或条形图运行时的状态,以及当它关闭时没有任何内容。 我对SQL没有经验,所以我不知道如何处理这个问题。我可以尝试使用下一次状态更改的开始创建结束日期/时间,但我不确定这是否可以在MySQL中实现。 我曾尝试使用查询列表在excel中执行此操作,但它仅绘制为单个日期/时间点。我想我需要某种持续时间。我不知道该怎么办。 任何建议或指示将不胜感激。
答案 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 |
+---------------------+---------------------+-----------+----------+