date_trunc 5-минутный интервал в PostgreSQL

Возможный дубликат:
Какой самый быстрый способ урезать метки времени до 5 минут в Postgres?
Postgresql SQL GROUP BY временной интервал с произвольной точностью (до миллисекунд)

Я хочу агрегировать данные с 5-минутным интервалом в PostgreSQL. Если я использую date_trunc() функция, я могу агрегировать данные с интервалом в час, месяц, день, неделю и т. д., но не в определенный интервал, например, 5 минут или 5 дней.

select date_trunc('hour', date1), count(*) from table1 group by 1;

Кто-нибудь знает, как мы можем добиться этого в PostgreSQL?

Любая помощь приветствуется.

2 ответа

SELECT date_trunc('hour', date1) AS hour_stump
      ,(extract(minute FROM date1)::int / 5) AS min5_slot
      ,count(*)
FROM   table1
GROUP  BY 1, 2
ORDER  BY 1, 2;

Вы могли бы GROUP BY две колонки: временная метка, усеченная до часа и 5-минутный интервал.

Пример производит слоты 0 - 11, добавлять 1 Если вы предпочитаете 1 - 12,
Я бросил результат extract() целое число, поэтому деление / 5 усекает дробные цифры. Результат:
минута 0 - 4 -> слот 0
минут 5 - 9 -> слот 1
и т.п.

Этот запрос возвращает значения только для тех 5-минутных интервалов, в которых они найдены. Если вам нужно значение для каждого слота или если вы хотите получить промежуточную сумму за 5-минутные слоты, рассмотрите следующий связанный ответ:
PostgreSQL: подсчет количества строк для запроса "по минутам"

Вот простой запрос, который вы можете обернуть в функцию или вырезать и вставить везде:

select now()::timestamp(0), (extract(epoch from now()::timestamptz(0)-date_trunc('d',now()))::int)/60;

Это даст вам текущее время и число от 0 до n-1, где n=60 здесь. Чтобы сделать это каждые 5 минут, сделайте это число 300 и так далее. Он группируется по секундам с начала дня. Чтобы сгруппировать его по секундам с начала года, начала часа или чего-либо еще, измените "d" в date_trunc.

Другие вопросы по тегам