Получить данные из нескольких выборок в PostgreSql (используя DBeaver) - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть такая таблица:

10/10/2018 00:00 | 5
10/10/2018 00:10 | 7
10/10/2018 00:20 | 9
...
10/10/2018 23:40 | 5
10/10/2018 23:50 | 6

Мне нужно получить среднее число в час и вернуть средние значения за все часы (с 00:00 до 23:00)

Я могу получить среднее значение за два часа, например:

(select avg(value)
from public.table
where time_stamp between TO_TIMESTAMP('2018-11-05 20:00:00', 'YYYY-MM-DD HH24:MI:SS') 
and
TO_TIMESTAMP('2018-11-05 20:00:00', 'YYYY-MM-DD HH24:MI:SS') + interval '1 hour')
UNION ALL
(select avg(value)
from public.table
where time_stamp between TO_TIMESTAMP('2018-11-05 21:00:00', 'YYYY-MM-DD HH24:MI:SS') 
and
TO_TIMESTAMP('2018-11-05 21:00:00', 'YYYY-MM-DD HH24:MI:SS') + interval '1 hour')

Но как я могу получить все 24 средних значения в некотором цикле? Я не хочу копировать этот SQL 24 раза.

1 Ответ

0 голосов
/ 06 ноября 2018

Дайте этому попытку

select 
   date_trunc('hour', time_stamp), avg(value) 
from 
   public.table 
where 
   date_trunc('day', time_stamp) = date_trunc('day', TO_TIMESTAMP('2018-11-05 00:00:00', 'YYYY-MM-DD HH24:MI:SS')) 
group by 
   date_trunc('hour', time_stamp);

Идея состоит в том, чтобы делать все метки времени только конкретными часами. Затем выберите все записи, которые появляются в этот день, сгруппированные по часам. Выполните средние значения по каждому часу, группируя.

...