#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 и он будет достаточно хорошо работать — простые арифметические операции, подобные этому, довольно быстры