Я использую Postgresql 9, и я борюсь с подсчетом и группировкой, когда никакие строки не подсчитаны.
Давайте предположим следующую схему:
create table views {
date_event timestamp with time zone ;
event_id integer;
}
Давайте представим следующее содержимое:
2012-01-01 00:00:05 2
2012-01-01 01:00:05 5
2012-01-01 03:00:05 8
2012-01-01 03:00:15 20
Я хочу сгруппировать по часам и посчитать количество строк.Я хотел бы получить следующее:
2012-01-01 00:00:00 1
2012-01-01 01:00:00 1
2012-01-01 02:00:00 0
2012-01-01 03:00:00 2
2012-01-01 04:00:00 0
2012-01-01 05:00:00 0
.
.
2012-01-07 23:00:00 0
Я имею в виду, что для каждого временного интервала я считаю количество строк в моей таблице, чья дата соответствует, в противном случае я возвращаю строку с нулевым счетчиком.
Следующее, безусловно, не будет работать (будут приводить только строки со счетными строками> 0).
SELECT extract ( hour from date_event ),count(*)
FROM views
where date_event > '2012-01-01' and date_event <'2012-01-07'
GROUP BY extract ( hour from date_event );
Обратите внимание, что мне также может потребоваться группировка по минутам, часам илипо дням, месяцам или годам (конечно, возможно несколько запросов).
Я могу использовать только старый старый sql, и так как моя таблица представлений может быть очень большой (> 100M записей), я пытаюсьпомнить о производительности.
Как этого добиться?
Спасибо!