Получить данные из нескольких выборок в 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);
Идея состоит в том, чтобы сделать все метки времени только конкретными часами. Затем выберите все записи, которые появляются в этот день, сгруппированные по часам. Выполните ваши средние значения в течение каждого часа группировки.