powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Разбиение временного интервала по часовым с группировкой полей и count
3 сообщений из 3, страница 1 из 1
Разбиение временного интервала по часовым с группировкой полей и count
    #40094323
ARRay001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени суток!

Есть такая задачка (данных может быть больше):
Код: 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
Разбиение временного интервала по часовым с группировкой полей и count
    #40094328
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Разбиение временного интервала по часовым с группировкой полей и count
    #40094331
ARRay001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous,
Спасибо!
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Разбиение временного интервала по часовым с группировкой полей и count
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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