Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Инфо по каждому часу, если пусто 0  [new]
Stranges
Member

Откуда:
Сообщений: 7
Нужно вывести из таблицы инфо по каждому часу в 24часовом формате, если в таблице нет инфо то вывести 0. Есть запрос который выводит инфо из бд, но только то что есть, не по каждому часу, а нужно по 24.
Думала сделать временную таблицу в которой хранить значения от 0 до 23 и джойнить ее, но кажется это оперативное и глупое решение.
Дайте грамотных идей плиз!!!!!
21 сен 17, 21:56    [20813823]     Ответить | Цитировать Сообщить модератору
 Re: Инфо по каждому часу, если пусто 0  [new]
vyegorov
Member

Откуда: Рига
Сообщений: 1025
Stranges,

Как-то так:
SELECT h.h, coalesce(t.val, 0) val
  FROM generate_series(date_trunc('day', now()), date_trunc('day',now()) + INTERVAL '23h', '1h') h
  LEFT JOIN data_tab t ON date_trunc('hour', t.datetime)=h.h;


Только надо иначе связывать, чтобы индексы не вырубать. Возможно LATERAL подзапросом что-то считать для каждого часа.
21 сен 17, 22:05    [20813847]     Ответить | Цитировать Сообщить модератору
 Re: Инфо по каждому часу, если пусто 0  [new]
Lonepsycho
Member

Откуда: Siauliai, Литва
Сообщений: 514
vyegorov,

может лучше с CTE, и UNION ALL вместе с NOT EXISTS... ?
22 сен 17, 07:42    [20814312]     Ответить | Цитировать Сообщить модератору
 Re: Инфо по каждому часу, если пусто 0  [new]
vyegorov
Member

Откуда: Рига
Сообщений: 1025
Lonepsycho,

Может и лучше, неизвестно что там за таблица и какие данные в ней.
22 сен 17, 11:26    [20815037]     Ответить | Цитировать Сообщить модератору
 Re: Инфо по каждому часу, если пусто 0  [new]
Stranges
Member

Откуда:
Сообщений: 7
vyegorov, спасибо большое!! Передалала как надо, все работает!
Таблица небольшая, требуются данные только за день, а там меньше 100 записей, работает отлично!
22 сен 17, 23:08    [20817523]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить