Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите вычислить интервал по "не прерывным значениям" или как избавится от курсора  [new]
maddig
Member

Откуда: Киев
Сообщений: 51
Всем привет, сразу прошу прощение если заголовок не совсем соответствует вопросу.
Собственно есть простая таблица состоящая из двух полей DateTime, Flag:

DateTime Flag
2014-07-010
2014-07-021
2014-07-031
2014-07-041
2014-07-050
2014-07-060
2014-07-071
2014-07-081
2014-07-091

Нужно получить на выходе время начала и конца периода когда флаг был = 1, или разность дат это уже не принципиально, т.е. по примеру должна получится таблица:
StartDateEnDate
2014-07-022014-07-04
2014-07-072014-07-09

Данную задачу я решил с помощью курсора, но так как данных очень много есть проблемы с производительностью, возможно есть более быстрое и постое решение без использования курсора?
11 авг 14, 15:52    [16426659]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вычислить интервал по "не прерывным значениям" или как избавится от курсора  [new]
invm
Member

Откуда: Москва
Сообщений: 9646
with x as
(
 select
  t.*,
  dateadd(day, -row_number() over (partition by t.Flag order by t.[DateTime]), t.[DateTime]) as g
 from
  [Таблица] t
)
select
 min(x.[DateTime]), max(x.[DateTime])
from
 x
where
 x.Flag = 1
group by
 x.g;
11 авг 14, 16:12    [16426782]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вычислить интервал по "не прерывным значениям" или как избавится от курсора  [new]
maddig
Member

Откуда: Киев
Сообщений: 51
invm,

Спасибо, подскажите а если поле [DateTime] содержит время с точностью в пол секунды (500мс) и данные нужно посчитать в приделах дня?
11 авг 14, 16:38    [16426956]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить