2015-02-17 3 views
1

Мне нужно подсчитать максимальную последовательность строк, удовлетворяющих определенному условию. пример заключается в следующем:Как считать максимальные вхождения строк, удовлетворяющих определенному условию

time | value 
10:00:01| 0 
10:00:02| 0 
10:00:03| 1 
10:00:04| 0 
10:00:05| 0 
10:00:06| 0 
10:00:07| 1 
........| ..... 

я хочу запрос, чтобы вернуть максимум вхождения 0 прерывается 1. в приведенном выше примере это будет возвращать 3.

есть способ сделать это в SQL Server? Спасибо.

+1

Что запрос вы попробовать? – Gunaseelan

+1

Это версия проблемы «самая длинная победная серия» – Strawberry

ответ

1

Вы можете сделать это с помощью переменных, чтобы перечислять последовательные значения. Затем используйте order by и limit, чтобы получить наибольшее количество последовательности:

select t.* 
from (select t.*, 
      (@rn := if(@v = value, @rn + 1, 
         if(@v := value, 1, 1) 
         ) 
      ) as seqnum 
     from table t cross join 
      (select @v := -1, @rn := 0) vars 
     order by time 
    ) t 
where value = 0 
order by seqnum desc 
limit 1;