У меня есть таблица squitters
, среди прочего, столбец parsed_time
. Я хочу знать количество записей в час за последние два дня и использовал этот запрос:
SELECT date_trunc('hour', parsed_time) AS hour , count(*)
FROM squitters
WHERE parsed_time > date_trunc('hour', now()) - interval '2 day'
GROUP BY hour
ORDER BY hour DESC;
Это работает, но часы с нулевыми записями не отображаются в результате. Я хочу иметь часы с нулевыми записями и в результате с счетчиком, равным нулю, поэтому я написал этот запрос, используя функцию generate_series
:
SELECT bins.hour, count(squitters.parsed_time)
FROM generate_series(date_trunc('hour', now() - interval '2 day'), now(), '1 hour') bins(hour)
LEFT OUTER JOIN squitters ON bins.hour = date_trunc('hours', squitters.parsed_time)
GROUP BY bins.hour
ORDER BY bins.hour DESC;
Это работает, в результате получаются часовые корзины с количеством, равным нулю, но значительно медленнее.
Как можно получить скорость первого запроса при подсчете = ноль результатов второго запроса?
(кстати, есть индекс parsed_time
)