Есть ли способ сгруппироваться по интервалам в 15 минут в DuckDB?

#sql #business-intelligence #olap #duckdb

Вопрос:

Я сделал столик с

 create table counter (
  createdat TIMESTAMP,
  tickets INT, 
  id VARCHAR
)
 

и я хотел бы сгруппировать строки с интервалами в 15 минут, поэтому я пытаюсь сделать это с помощью:

 SELECT
  SUM(tickets) AS total,
  extract(year from createdat),
  extract(month from createdat),
  extract(day from createdat),
  extract(hour from createdat)
from counter
where id = ?
group by
  extract(year from createdat),
  extract(month from createdat),
  extract(day from createdat),
  extract(hour from createdat)
 

С этим запросом я получаю только за час. Однако я не могу изменить его на минуты.

Как бы выглядел запрос на группировку с интервалами в 15 минут?

Ответ №1:

Добавьте выражение за четверть часа:

 (extract(minute from createdat) / 15)::integer
 

к вашим колонкам:

 select
  sum(tickets) AS total,
  extract(year from createdat),
  extract(month from createdat),
  extract(day from createdat),
  extract(hour from createdat),
  (extract(minute from createdat) / 15)::integer
from counter
where id = ?
group by
  extract(year from createdat),
  extract(month from createdat),
  extract(day from createdat),
  extract(hour from createdat),
  (extract(minute from createdat) / 15)::integer
 

Приведение к integer усечению дробной части результата деления.

Комментарии:

1. Большое спасибо!! это лучший запрос для увеличения интервалов на 15 минут или есть другие запросы с лучшей производительностью?

2. @jaox это единственный способ, которым AFAIK и он будет достаточно хорошо работать — простые арифметические операции, подобные этому, довольно быстры