Предположим, у меня есть таблица, содержащая набор точек данных, каждый из которых состоит из метки времени и значения. Как написать запрос, который возвращает true (1), если есть по меньшей мере N последовательных записей (упорядоченных по метке времени), которые превышают заданное значение X, false (0) в противном случае?Значение порога для n последовательных минут
Следующая делает это в течение 3 последовательных записей, но не работает в общем случае без создания динамического запроса и добавить больше «и существует» случаи:
truncate table tblData
insert into tblData values ('1-jul-2013 13:01:00', 64)
insert into tblData values ('1-jul-2013 13:02:00', 13)
insert into tblData values ('1-jul-2013 13:03:00', 7)
insert into tblData values ('1-jul-2013 13:04:00', 17)
insert into tblData values ('1-jul-2013 13:05:00', 7)
insert into tblData values ('1-jul-2013 13:06:00', 18)
insert into tblData values ('1-jul-2013 13:07:00', 9)
insert into tblData values ('1-jul-2013 13:08:00', 20)
insert into tblData values ('1-jul-2013 13:09:00', 12)
insert into tblData values ('1-jul-2013 13:10:00', 21)
insert into tblData values ('1-jul-2013 13:11:00', 22)
insert into tblData values ('1-jul-2013 13:12:00', 3)
insert into tblData values ('1-jul-2013 13:13:00', 22)
insert into tblData values ('1-jul-2013 13:14:00', 20)
declare @x as int = 10
select count(*)
from tblData a
where a.dt in
(select dt from tblData b where b.value > @x and b.dt >= a.dt and b.dt < DATEADD(minute,1,a.dt)) and exists
(select dt from tblData b where b.value > @x and b.dt >= DATEADD(minute,1,a.dt) and b.dt < DATEADD(minute,2,a.dt)) and exists
(select dt from tblData b where b.value > @x and b.dt >= DATEADD(minute,2,a.dt) and b.dt < DATEADD(minute,3,a.dt))
Идеи?
гарантированную ли каждая метка времени, чтобы быть на минуту? –