2012-10-26 5 views
0

У меня есть таблица, в которой все записи имеют идентификатор, метку времени и логическое значение. Мне нужно обнаружить, в каких записях логическое значение изменяется на false в течение 1 секунды после того, как оно истинно для одного и того же идентификатора.Обнаружение изменения состояния во временном ряду

Я работаю над следующим утверждением, но после некоторых исследований я чувствую, что CASE в сочетании с инструкцией FETCH может работать лучше, но я не нашел хорошего примера, где они были использованы вместе ,

SELECT * 
FROM Table_1 
WHERE timestamp IN( 
    SELECT DATEADD(Second, 1, timestamp) 
    from Table_1 
    where Boolean = 1) 
AND ID in ( 
    SELECT ID 
    from Table_1 where Boolean = 1) 
AND Boolean = 0 
+1

FETCH является командой T-SQL, который позволяет получить следующую строку из курсора. Он не имеет ничего общего со стандартным SQL. См. Http://msdn.microsoft.com/en-us/library/ms180152.aspx. –

+0

Можете ли вы предоставить некоторые данные образца? – Kermit

+0

@Mellonjollie Используете ли вы SQL Server? – Kermit

ответ

1

Как насчет:

Select Distinct 
    t1.id 
From 
    Table_1 t1 
    Inner Join 
    Table_1 t2 
    On 
     t1.Id = t2.Id And 
     t1.Boolean = True And 
     t2.Boolean = False And 
     DateDiff(Second, t1.Timestamp, t2.Timestamp) Between 0 And 1 

дело вкуса, как много того, что вы положили в присоединиться к статье и сколько вы положили в ИНЕКЕ.

редактирует

  • добавил отчетливый минимум
  • пут, связанный с разницей дат
+0

Я думаю, что я вижу, где вы собираетесь с этим утверждением, однако он возвращает более 1 миллиона строк, когда сама таблица составляет всего 107 000. – Mellonjollie

+0

Теперь я положил отчетливо – Laurence

+0

Эврика, я понял! Спасибо за помощь Лоуренс. – Mellonjollie

Смежные вопросы