У меня была похожая проблема с журналами аварийных сообщений:
CREATE TABLE dbo.AlarmLogs([TimeStamp] datetime, Incoming bit, AlarmID int)
В них были записи с входящим и постепенным отключением (1,0), поэтому я знал, когда сигнализация включается или выключается.Тем не менее, иногда было бы несколько поступающих сигналов до постепенного прекращения, то есть
2011/01/01 13:55:43, 1, 246
2011/01/01 13:55:48, 1, 246
2011/01/01 13:56:14, 0, 246
2011/01/01 13:57:38, 1, 246
2011/01/01 13:58:16, 0, 246
Я потратил много времени, пытаясь решить эту проблему с помощью различных методов SQL, включая самостоятельные объединения и т. Д., Но теперь решил это с помощьюкурсор.
Хотя использование курсора должно быть сведено к минимуму, бывают случаи, когда они действительно работают быстрее, и это был один из них.
Курсор просто проходил по отсортированной таблице и вставлял сигнал тревогив таблицу результатов, как только он нашел время окончания.
Надеюсь, это поможет.