У меня есть таблица с такой схемой:
create table mytable (creation_date timestamp,
value int,
category int);
Я хочу максимальное вхождение значения каждый час для каждой категории, только в будние дни. Я добился определенного прогресса, у меня сейчас такой запрос:
select category,foo.h as h,value, count(value) from mytable, (
select date_trunc('hour',
'2000-01-01 00:00:00'::timestamp+generate_series(0,23)*'1 hour'::interval)::time as h) AS foo
where date_part('hour',creation_date) = date_part('hour',foo.h) and
date_part('dow',creation_date) > 0 and date_part('dow',creation_date) < 6
group by category,h,value;
В результате я получил что-то вроде этого:
category | h | value | count
---------+----------+---------+-------
1 | 00:00:00 | 2 | 1
1 | 01:00:00 | 2 | 1
1 | 02:00:00 | 2 | 6
1 | 03:00:00 | 2 | 31
1 | 03:00:00 | 3 | 11
1 | 04:00:00 | 2 | 21
1 | 04:00:00 | 3 | 9
1 | 13:00:00 | 1 | 14
1 | 14:00:00 | 1 | 10
1 | 14:00:00 | 2 | 7
1 | 15:00:00 | 1 | 52
например, в 04:00 у меня есть значения 2 и 3, со счетчиками 21 и 9 соответственно, мне нужно только значение с наибольшим количеством, которое было бы в статическом режиме.
Кстати, у меня более 2M записей