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

Откуда:
Сообщений: 17
доброе время суток!
у меня возникла сложность с запросом,надеюсь вы поможете разобраться
у меня есть 2 колонки
num date
2 2015-03-13 00:06:02.000
2 2015-03-13 00:07:30.000
1 2015-03-13 00:10:07.000
2 2015-03-13 00:10:10.000
2 2015-03-13 00:10:10.000
2 2015-03-13 00:16:27.000
2 2015-03-13 00:19:08.000
2 2015-03-13 00:19:08.000
2 2015-03-13 00:20:09.000
1 2015-03-13 00:21:00.000
2 2015-03-13 00:21:00.000
2 2015-03-13 00:21:00.000
1 2015-03-13 00:22:00.000
2 2015-03-13 00:24:47.000
2 2015-03-13 00:27:25.000
2 2015-03-13 00:28:29.000

использую mssql 2008 r2

как правильно построить запрос так чтобы дату сгруппировать по 5 минут и результирующая выборка выглядела так
первую колонку нужно сделать max и avg при выборке

2 2015-03-13 00:05:00.000
2 2015-03-13 00:10:00.000
1 2015-03-13 00:15:00.000
2 2015-03-13 00:20:00.000
2 2015-03-13 00:25:00.000
2 2015-03-13 00:30:00.000
...


SELECT max(num),AVG(num), (DATEPART(MINUTE, [date]) % 5)
FROM test
group by num,[date],(DATEPART(MINUTE, [date]) % 5)

такой запрос не подходит,потому что я немогу вывести колонку даты с интервалом 5 минут

естественно в этот 5 минутный интервал должны группироваться соответствующие временному диапазону строки

спасибо за советы!
14 мар 15, 09:18    [17383668]     Ответить | Цитировать Сообщить модератору
 Re: group by minute  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
select max(num) as max_num
     , avg(num) as avg_num
     , dateadd( mi, datediff( mi,'20150101', [date] )/5*5, '20150101' )  as dt
from test
group by dateadd( mi, datediff( mi,'20150101', [date] )/5*5, '20150101' )
14 мар 15, 09:31    [17383674]     Ответить | Цитировать Сообщить модератору
 Re: group by minute  [new]
cov
Member

Откуда:
Сообщений: 17
Knyazev Alexey,

Алексей, спасибо, но к сожалению ,не совсем то получилось.

max_num avg_num dt
2 1 2015-03-13 00:45:00.000
2 1 2015-03-13 00:30:00.000
2 1 2015-03-13 06:30:00.000
2 2 2015-03-13 04:00:00.000
1 1 2015-03-13 01:40:00.000

и если я будут брать каждый раз начало года расчетное,это не сильно напряжет скуль сервер, т.к выполнение подобного запроса будет проходить очень часто
14 мар 15, 09:40    [17383687]     Ответить | Цитировать Сообщить модератору
 Re: group by minute  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
cov
но к сожалению ,не совсем то получилось.


кто-то обманывает:

declare @t table ( num int, date datetime )
insert into @t
values 
(2, '2015-03-13 00:06:02.000' )
,(2, '2015-03-13 00:07:30.000' )
,(1, '2015-03-13 00:10:07.000' )
,(2, '2015-03-13 00:10:10.000' )
,(2, '2015-03-13 00:10:10.000' )
,(2, '2015-03-13 00:16:27.000' )
,(2, '2015-03-13 00:19:08.000' )
,(2, '2015-03-13 00:19:08.000' )
,(2, '2015-03-13 00:20:09.000' )
,(1, '2015-03-13 00:21:00.000' )
,(2, '2015-03-13 00:21:00.000' )
,(2, '2015-03-13 00:21:00.000' )
,(1, '2015-03-13 00:22:00.000' )
,(2, '2015-03-13 00:24:47.000' )
,(2, '2015-03-13 00:27:25.000' )
,(2, '2015-03-13 00:28:29.000' )

select max(num) max_num
     , avg(num) avg_num
     , dateadd( mi, datediff( mi,'20150101', date )/5*5, '20150101' ) dt 
from @t
group by dateadd( mi, datediff( mi,'20150101', date )/5*5, '20150101' )
from @t
group by dateadd( mi, datediff( mi,'20150101', date )/5*5, '20150101' )


К сообщению приложен файл. Размер - 18Kb
14 мар 15, 09:46    [17383696]     Ответить | Цитировать Сообщить модератору
 Re: group by minute  [new]
cov
Member

Откуда:
Сообщений: 17
Knyazev Alexey,

Да ,вы правый, большое спасибо за решение, моей ошибкой было то что на большом объеме данных я действительно видел
немного разрозненные данные на первый взгляд ,потому что не сделал
order by dateadd( mi, datediff( mi,'20150101', timest )/5*5, '20150101' )
14 мар 15, 10:00    [17383709]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить