2013-05-16 4 views
0

У меня есть таблица с которой записывается время и уровень бака.Запрос количества времени, проведенного вне диапазона

12:00 | 85

12:01 | 77

12:02 | 78

12:03 | 82

12:05 | 79

12:06 | 75

12:07 | 85

и т.д.

Как вы могли бы написать запрос, чтобы получить количество времени, бак был ниже 80 в течение дня? Я использую сервер sql 2008

+0

Какой тип первого столбца? –

+1

Требуется более подробная информация для действительно правильного ответа, но, как он выглядит, если одна строка представляет одну минуту, и вы всегда отбираете каждую минуту, как ярлык, не могли бы вы просто подсчитать количество строк, где уровень составляет <80, так как 1 строка = 1 минута? – Julian

ответ

0

Для этого вам нужно в следующий раз. В некоторых базах данных есть функции lead() и lag(). Я сделаю это с коррелированным подзапросом - более общий метод.

select sum(endTime - Time) 
from (select t.*, 
      (select min(time) from t t2 where t2.time > t.time 
      ) as endTime 
     from t 
    ) t 
where level < 80; 

один нюанс: дата и время функции варьируются между базами данных, поэтому первый синтаксис не нужную работу. Например, в SQL Server это может быть:

select sum(datediff(ms, Time, endTime)) 

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

  • Нет связанных вопросов^_^