Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите с инервалом дат, пожалуйста  [new]
30042015
Guest
Здравствуйте !
Есть непрерывная последовательность дат
declare @Tmp table(ADate smalldatetime, AIndex int)

insert into @Tmp
select '20150101',0 union
select '20150102',0 union
select '20150103',0 union
select '20150104',0 union
select '20150105',1 union
select '20150106',1 union
select '20150107',1 union
select '20150108',0 union
select '20150109',0 union
select '20150110',0 union
select '20150111',1 union
select '20150112',1


нужно получить табличку вида

SDateFDateIndex
2015-01-012015-01-040
2015-01-052015-01-071
2015-01-082015-01-100
2015-01-112015-01-121

Помогите пожалуйста, а то мозг уже не варит
30 апр 15, 14:53    [17587484]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с инервалом дат, пожалуйста  [new]
Добрый Э - Эх
Guest
30042015,

группировка по разности между датой и row_number() over(дата).
ну или поиск по форуму тем с моим участием по ключевому слову GRP_ID
30 апр 15, 15:19    [17587717]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с инервалом дат, пожалуйста  [new]
Adony
Member

Откуда: Москва
Сообщений: 1083
with t1 as
(
 select t.*,
  dateadd(day, -row_number() over (partition by t.AIndex order by t.ADate), t.ADate) as dt
 from @Tmp t
)
select min(t1.ADate), max(t1.ADate), t1.AIndex
from t1
group by t1.dt, t1.AIndex
30 апр 15, 15:19    [17587719]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с инервалом дат, пожалуйста  [new]
Добрый Э - Эх
Guest
Добрый Э - Эх
30042015,

группировка по разности между датой и row_number() over(ORDER BY дата).
ну или поиск по форуму тем с моим участием по ключевому слову GRP_ID
30 апр 15, 15:22    [17587741]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с инервалом дат, пожалуйста  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Adony
with t1 as
(
 select t.*,
  dateadd(day, -row_number() over (partition by t.AIndex order by t.ADate), t.ADate) as dt
 from @Tmp t
)
select min(t1.ADate), max(t1.ADate), t1.AIndex
from t1
group by t1.dt, t1.AIndex


тогда наверное так:

;with t1 as
(
 select t.*,
  dateadd(day, -row_number() over (partition by t.AIndex order by t.ADate), t.ADate) as dt
 from @Tmp t
)
select min(t1.ADate), max(t1.ADate), t1.AIndex
from t1
group by t1.dt, t1.AIndex
order by 1
30 апр 15, 15:27    [17587780]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с инервалом дат, пожалуйста  [new]
zasandator
Member [скрыт] [заблокирован]

Откуда:
Сообщений: 4887
30042015,

читай задачу "островки" Ицик Бен-Ган автор. Он как раз именно это там разжевывает для чайников
30 апр 15, 16:37    [17588199]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с инервалом дат, пожалуйста  [new]
30042015
Guest
Спасибо !
30 апр 15, 16:39    [17588205]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить