Получить данные из нескольких выборок в PostgreSql (используя DBeaver)

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

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 ответ

Решение

Дайте это попробовать

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);

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

Другие вопросы по тегам