假设我有一个带有警报系统日志的数据库。有一个间隔,在数据库中插入一个新行。该行有alarm_id、一个日期时间和一个警报是打开还是关闭的标志。
我想知道在一段时间(今天、本周、本月)内警报设置为开启(armed=1)多长时间。这将是具有武装=1 的后续行。如果有一个武装=0 的行,它可能不会被计算在内。
例如:
id alarm_id armed date
1 1 0 2012-01-01 00:00:00
2 1 1 2012-01-01 00:10:00
3 1 1 2012-01-01 00:20:10
4 1 1 2012-01-01 00:29:58
5 1 0 2012-01-01 00:40:00
6 1 1 2012-01-01 01:00:00
7 1 1 2012-01-01 01:10:00
8 1 1 2012-01-01 01:20:00
9 1 0 2012-01-01 01:30:00
在本例中,警报从 00:10:00 到 00:29:58 => 19:58 分钟布防。从 1:00:00 到 1:20:00 => 20 分钟布防。在这一天,警报已经启动至少 39:58 分钟,这必须是我查询的结果。
日志就像一个心跳,因此警报可以在“开”和“关”状态之间进行武装,但我只想知道后续行武装=1。
我一直在为此烦恼。我自己加入了桌子,但我不知道该怎么做。甚至可能吗?我已经设置了一个 SQL Fiddle 来处理数据:http ://sqlfiddle.com/#!2/9eca2/2/0
谢谢。