Имя: Пароль:
IT
 
SQL: DATETIME и GROUP BY произвольный интервал времени (полчаса, 15 минут)
,
0 spectre1978
 
27.11.14
21:19
Добрый вечер!

Не подскажете ли, как в языке SQL сделать группировку с произвольным интервалом времени? В таблице есть столбец DateTime, как решается вопрос с часом, месяцем, годом - понятно, есть соответствующие встроенные функции, которые берут эту часть времени, по функции и группируем.
А если, например, я хочу прогруппировать некую сумму каждые полчаса или каждые 15 минут, каждые 20 минут - тогда как?
1 vicof
 
27.11.14
21:21
НачалоПериода(Период, Минута), не?
2 vicof
 
27.11.14
21:21
не
3 spectre1978
 
27.11.14
21:22
SQL! Не язык запросов 1С!
4 vicof
 
27.11.14
21:23
ну посмотри как преобразуется начало периода в склную форму
5 vicof
 
27.11.14
21:24
но это не решит задачу группировки по 20 минут
6 vicof
 
27.11.14
21:24
соединяй с самой собой по периоду + 20 минут
7 vicof
 
27.11.14
21:25
думаю, должно прокатить
8 spectre1978
 
27.11.14
21:26
Да. Мне пришло в голову нечто подобное - заполнить временную таблицу интервалами нужного размера и группировать по попаданию в интервалы.
9 spectre1978
 
27.11.14
21:26
спасибо!
10 trad
 
27.11.14
21:41
datepart(Поле, mi) - datepart(Поле, mi)%15
datepart(Поле, mi) - datepart(Поле, mi)%20
datepart(Поле, mi) - datepart(Поле, mi)%30
datepart(Поле, mi) - datepart(Поле, mi)%6
11 RomanYS
 
27.11.14
22:56
(10) красиво
12 КонецЦикла
 
28.11.14
00:21
Красиво, но не будет возможности выводить равные интервалы если данных не будет (например для читабельного вида, графика)
Я когда-то делал тупо служебную таблицу времени и соединял с ней чтобы не чесать всякие ТЗ и иже с ними...
13 КонецЦикла
 
28.11.14
00:23
Не временную таблицу делал и не соединял само с собой
Зачем каждый раз фигачить временную таблицу? Заполнил на год вперед и спишь спокойно, а отчетом пользуются 50 раз в день 50 пользователей
14 DrZombi
 
гуру
28.11.14
07:48
(3) Да ты шо... тебя может удивит, но 1С скопипастила язык запросов в урезанной версии :)
15 DrZombi
 
гуру
28.11.14
07:50
(0) Что значит произвольный интервал?
Вот у тебя есть 30 рублей и есть дата 20.10.2013 и время 10:11, так ты хоть тресни, но время у тебя 10:11 :)
16 spectre1978
 
28.11.14
08:24
(15)
Таблица
11.11.2011 10:10 1.25
11.11.2011 10:13 -3.20
11.11.2011 10:15 2.00
11.11.2011 10:21 1.00
11.11.2011 10:29 3.00

Хочу получить набор сумм через каждые 5 минут

11.11.2011 10:10-11.11.2011 10:14:59 -1.95
11.11.2011 10:15-11.11.2011 10:19:59 2.00
11.11.2011 10:20-11.11.2011 10:24:59 1.00
11.11.2011 10:25-11.11.2011 10:29:59 3.00

Совсем идеально было бы то же самое с нарастающим итогом, т.е.

11.11.2011 10:10-11.11.2011 10:14:59 -1.95
11.11.2011 10:15-11.11.2011 10:19:59 0.05
11.11.2011 10:20-11.11.2011 10:24:59 1.05
11.11.2011 10:25-11.11.2011 10:29:59 4.05

Интервал должен задаваться. Т.е. захотел - сделал через 5 минут, захотел - через 10 или через 20.
17 spectre1978
 
28.11.14
08:28
(14) не удивит. Но мне нужен именно SQL, и я об этом написал. Что не так?
18 dk
 
28.11.14
08:53
(10) +1
Нужно просто обычное время конвертнуть в нужные тебе градации
можно еще через нужное количество CASE решить
типа
CASE 0 < Минута 5 ТОгда 1
CASE 6 < Минута 10 ТОгда 2
...
19 dk
 
28.11.14
08:55
или
(Часы * 60 + Минуты) % НужнаяГрадация
если в пределах суток надо
20 КонецЦикла
 
28.11.14
09:04
Для нарастающего итога как раз пригодиться "само с собой"
21 spock
 
28.11.14
09:06
(0) Только доп.таблица с интервалами, которая будет соединяться с основной по '>' или '<'. Если вырезать из datetime время, то это гарантированное сканирование индекса/таблицы - потому и 15 минут.
22 Sorm
 
28.11.14
09:15
(0) Собстнаа... выдели нужные интервалы в отдельные столбцы, группируй в зависимости от необходимости. В группировка по вычисляемым выражениям на лету - мощная штука:)
23 КонецЦикла
 
28.11.14
09:18
(22) С трудом представилось что будет происходить с сервером...
24 Sorm
 
28.11.14
09:25
(23) Я вообще написал "В (10) группировка...":) Но (10) куда-то делось:)
Что будет происходить - вычисление на каждую строку для группировки:) Если строк мало - работает. Если строк много - долго работает:) Если строк сильно много - сильно долго работает:)
25 trad
 
28.11.14
09:25
(21) ты не понял, (0) не жалуется на производительность
26 КонецЦикла
 
28.11.14
09:28
(25) Все жалуются а он не жалуется...
27 spectre1978
 
28.11.14
09:45
(23) это будет не сервер, а настольная БД Access, причем локально. По крайней мере пока. Объемы данных невелики. Поэтому в (25) в общем-то правы.
28 spock
 
29.11.14
17:50
(25) а точно :)
AdBlock убивает бесплатный контент. 1Сергей