Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Разбиение временного интервала по часовым с группировкой полей и count / 3 сообщений из 3, страница 1 из 1
01.09.2021, 12:00
    #40094323
ARRay001
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбиение временного интервала по часовым с группировкой полей и count
Всем доброго времени суток!

Есть такая задачка (данных может быть больше):
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
with tbl (id, my_date, my_str1, my_str2) as (
  select 1, to_date('09.01.2019 15:04:34', 'DD.MM.YYYY HH24:MI:SS'),'Первый','Кр1' from dual
  union all
  select 2, to_date('09.01.2019 23:47:01', 'DD.MM.YYYY HH24:MI:SS'),null,'Кр2' from dual
  union all
  select 3, to_date('09.01.2019 18:00:00', 'DD.MM.YYYY HH24:MI:SS'),null,'Кр3' from dual
  union all
  select 3, to_date('08.01.2019 18:00:00', 'DD.MM.YYYY HH24:MI:SS'),null,'Кр3' from dual
  union all
  select 4, to_date('09.01.2019 15:00:00', 'DD.MM.YYYY HH24:MI:SS'),'Четвертый','Кр4' from dual
)



Надо получить так (отобрать в интервале, к примеру, от даты1=15ч до даты2=18ч:
№ п/п Интервал (по часу) my_str1 my_str2 Количество в каждой группе
1 15-16 'Четвертый' 'Кр4' 1
2 15-16 'Первый' 'Кр1' 1
3 17-18 'Нет данных' 'Кр3' 2


Пока удалось начать - дальше пока ступор и время поджимает:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
with tbl (id, my_date, my_str1, my_str2) as (
  select 1, to_date('09.01.2019 15:04:34', 'DD.MM.YYYY HH24:MI:SS'),'Первый','Кр1' from dual
  union all
  select 2, to_date('09.01.2019 23:47:01', 'DD.MM.YYYY HH24:MI:SS'),null,'Кр2' from dual
  union all
  select 3, to_date('09.01.2019 18:00:00', 'DD.MM.YYYY HH24:MI:SS'),null,'Кр3' from dual
  union all
  select 3, to_date('08.01.2019 18:00:00', 'DD.MM.YYYY HH24:MI:SS'),null,'Кр3' from dual
  union all
  select 4, to_date('09.01.2019 15:00:00', 'DD.MM.YYYY HH24:MI:SS'),'Четвертый','Кр4' from dual
)
select to_char(15 + 1 * (level - 1))||'-'||to_char(15 + 1 * (level - 1) + 1) as hr, count(1) as cnt
  from tbl
where to_number(to_char(my_date,'HH24')) between 15 and 18 
connect by 15 + 1 * (level - 1) < 18
and prior id = id
and prior sys_guid() is not null
group by to_char(15 + 1 * (level - 1))||'-'||to_char(15 + 1 * (level - 1) + 1);



P.s.: уточняю - дата не важна, учитываем только временные интервалы
...
Рейтинг: 0 / 0
01.09.2021, 12:23
    #40094328
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбиение временного интервала по часовым с группировкой полей и count
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
SQL> 
with tbl (id, my_date, my_str1, my_str2) as (
  select 1, to_date('09.01.2019 15:04:34', 'DD.MM.YYYY HH24:MI:SS'),'Первый','Кр1' from dual
  union all
  select 2, to_date('09.01.2019 23:47:01', 'DD.MM.YYYY HH24:MI:SS'),null,'Кр2' from dual
  union all
  select 3, to_date('09.01.2019 18:00:00', 'DD.MM.YYYY HH24:MI:SS'),null,'Кр3' from dual
  union all
  select 3, to_date('08.01.2019 18:00:00', 'DD.MM.YYYY HH24:MI:SS'),null,'Кр3' from dual
  union all
  select 4, to_date('09.01.2019 15:00:00', 'DD.MM.YYYY HH24:MI:SS'),'Четвертый','Кр4' from dual
)
select row_number() over(order by to_char(min(my_date),'hh24miss')) "№ п/п"
     , to_char(my_date,'hh24')||'-'||max(to_char(my_date+1/24,'hh24')) "Интервал"
     , coalesce(my_str1,'Нет данных') my_str1
     , coalesce(my_str2,'Нет данных') my_str2
		 , count(*) "Количество в каждой группе"
from tbl
where to_char(my_date,'hh24') between '15' and '18'
group by to_char(my_date,'hh24'),my_str1,my_str2
order by 1
;

     № п/п Интервал MY_STR1             MY_STR2             Количество в каждой группе
---------- -------- ------------------- ------------------- --------------------------
         1 15-16    Четвертый           Кр4                                          1
         2 15-16    Первый              Кр1                                          1
         3 18-19    Нет данных          Кр3                                          2

SQL> 
...
Рейтинг: 0 / 0
01.09.2021, 12:28
    #40094331
ARRay001
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбиение временного интервала по часовым с группировкой полей и count
andrey_anonymous,
Спасибо!
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Разбиение временного интервала по часовым с группировкой полей и count / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]