Группировка строк по диапазону - PullRequest
0 голосов
/ 07 сентября 2018

Как группировать данные по определенному диапазону времени в Oracle.

Мои данные, как показано ниже:

HHMISS  No_of_Sessions
010101  2
010102  3
010104  5
010107  2
010108  1
010110  6
010111  8
010113  1
010115  6

Мое требование - получать количество сеансов каждые 5 секунд.

HHMISS  No_of_Sessions
010100  10
010105  9
010110  15

1 Ответ

0 голосов
/ 07 сентября 2018

Ваш вопрос сбивает с толку, поскольку опубликованные вами результаты не соответствуют описанным вами требованиям.

Вот что я думаю вы ищете:

SELECT lpad(floor(to_number(hhmiss)/5)*5,6,'0') grp, sum(no_of_session)
from test_data
group by lpad(floor(to_number(hhmiss)/5)*5,6,'0')
order by lpad(floor(to_number(hhmiss)/5)*5,6,'0')

Это сгруппирует каждую строку ввода в интервалы по 5 секунд, а затем даст вам количество сеансов в каждой группе.

Полный пример с данными испытаний:

with test_data ( hhmiss, no_of_session ) as
(
SELECT '010101',  2 FROM DUAL UNION ALL
SELECT '010102',  3 FROM DUAL UNION ALL
SELECT '010104',  5 FROM DUAL UNION ALL
SELECT '010107',  2 FROM DUAL UNION ALL
SELECT '010108',  1 FROM DUAL UNION ALL
SELECT '010110',  6 FROM DUAL UNION ALL
SELECT '010111',  8 FROM DUAL UNION ALL
SELECT '010113',  1 FROM DUAL UNION ALL
SELECT '010115',  6 FROM DUAL )
SELECT lpad(floor(to_number(hhmiss)/5)*5,6,'0') grp, sum(no_of_session)
from test_data
group by lpad(floor(to_number(hhmiss)/5)*5,6,'0')
order by lpad(floor(to_number(hhmiss)/5)*5,6,'0')
+--------+--------------------+
|  GRP   | SUM(NO_OF_SESSION) |
+--------+--------------------+
| 010100 |                 10 |
| 010105 |                  3 |
| 010110 |                 15 |
| 010115 |                  6 |
+--------+--------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...