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

Откуда:
Сообщений: 132
Добрый день,
уже задавал этот вопрос здесь, немного перефразирую условие:

есть таблица:

event name prd start_time end_time
tag1 prd7A 12-05-16 10:15 15-05-16 10:20
tag1 prdB7 12-05-16 10:15 15-05-16 10:20
tag1 prd6D 12-05-16 10:15 15-05-16 10:20
tag1 prd9D 12-05-16 10:15 15-05-16 10:20
tag2 prd2L 18-03-16 11:00 18-03-16 11:30
tag2 prd5M 18-03-16 11:00 18-03-16 11:30
tag2 prd2L 18-03-16 11:44 18-03-16 11:55
tag2 prd5M 18-03-16 11:44 18-03-16 11:55
tag2 prd2L 18-03-16 12:05 18-03-16 12:30
tag2 prd5M 18-03-16 12:05 18-03-16 12:30
tag2 prd3Q 19-03-16 12:00 19-03-16 12:45


хотелось бы получить следующее:

name start_time end_time
tag1(prd7A prdB7 prd6D prd9D) 12-05-16 10:15 15-05-16 10:20
tag2(prd2L prd5M) 18-03-16 11:00 18-03-16 12:30
tag2(prd3Q) 19-03-16 12:00 19-03-16 12:45


то есть получается группировать по event name и упорядочить по дате, и по евентам где разница во времени между евентами меньше 15 мин, в этом случае евент будет со start_time - минимальной датой и end_time - максимальной датой
в диапазоне евентов с разницой меньше 15 мин.



заранее благодарю за ответы
12 сен 16, 10:47    [19653689]     Ответить | Цитировать Сообщить модератору
 Re: группировать по event с разницой меньше 15 мин  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20609
Тупо добавь к end_time эти 15 минут и группируй по строгому пересечению. Потом, когда нагруппируешься, отнимешь...
12 сен 16, 10:57    [19653746]     Ответить | Цитировать Сообщить модератору
 Re: группировать по event с разницой меньше 15 мин  [new]
0-0
Guest
sakot,

declare @t table(event_name nvarchar(40), prd nvarchar(40), start_time datetime, end_time datetime)


insert into @t(event_name, prd, start_time, end_time )
select 
'tag1', 'prd7A', '2016-05-12T10:15:00', '2016-05-15T10:20:00' 
union all select 'tag1', 'prdB7', '2016-05-12T10:15:00', '2016-05-15T10:20:00' 
union all select 'tag1', 'prd6D', '2016-05-12T10:15:00', '2016-05-15T10:20:00' 
union all select 'tag1', 'prd9D', '2016-05-12T10:15:00', '2016-05-15T10:20:00' 
union all select 'tag2', 'prd2L', '2016-03-18T11:00:00', '2016-03-18T11:30:00' 
union all select 'tag2', 'prd5M', '2016-03-18T11:00:00', '2016-03-18T11:30:00' 
union all select 'tag2', 'prd2L', '2016-03-18T11:44:00', '2016-03-18T11:55:00' 
union all select 'tag2', 'prd5M', '2016-03-18T11:44:00', '2016-03-18T11:55:00' 
union all select 'tag2', 'prd2L', '2016-03-18T12:05:00', '2016-03-18T12:30:00' 
union all select 'tag2', 'prd5M', '2016-03-18T12:05:00', '2016-03-18T12:30:00' 
union all select 'tag2', 'prd3Q', '2016-03-19T12:00:00', '2016-03-19T12:45:00' 





select d.event_name
,(select prd as 'data()' from @t t
where t.event_name = d.event_name and cast(t.start_time as date) = d.d
for xml path('')
) a
,d.start_time, d.end_time
 from(
select event_name,  
min(start_time) as start_time, max(end_time) as end_time, cast(start_time as date) as d from @t t1
group by event_name, cast(start_time as date)
)d
order by d.event_name asc
12 сен 16, 11:16    [19653851]     Ответить | Цитировать Сообщить модератору
 Re: группировать по event с разницой меньше 15 мин  [new]
0-0
Guest
В скобочках:
select d.event_name + N' (' + 
(select prd as 'data()' from @t t
where t.event_name = d.event_name and cast(t.start_time as date) = d.d
for xml path('')
) + N')'
,d.start_time, d.end_time
 from(
select event_name,  
min(start_time) as start_time, max(end_time) as end_time, cast(start_time as date) as d from @t t1
group by event_name, cast(start_time as date)
)d
order by d.event_name asc
12 сен 16, 11:17    [19653866]     Ответить | Цитировать Сообщить модератору
 Re: группировать по event с разницой меньше 15 мин  [new]
sakot
Member

Откуда:
Сообщений: 132
0-0,

спасиобо за ответ, вопрос, где в вашем запросе учитывается разница во времени между евентами меньше 15 мин,
как в случае с tag2(prd2L prd5M) 18-03-16 11:00 18-03-16 12:30?
13 сен 16, 10:02    [19657675]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить