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

我有一张桌子,上面有一张设备开关的date/时间列表。 这被认为是:

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

我正在创build一个时间线,用于显示设备何时运行,如何打开,什么时候打开。 我没有经验的SQL,所以我不知道如何处理这个。 我可以尝试创build一个结束date/时间使用状态的下一个改变的开始,但我不知道这是可能的在MySQL中。 我试图在Excel中使用查询列表来做到这一点,但它只能作为单一的date/时间点。 我想我需要某种持续时间。 我不知道如何进行。 任何意见或指针,将不胜感激。

 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 | +---------------------+---------------------+-----------+----------+