|
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) а точно :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |