DuckDB 有没有办法按 15 分钟的间隔进行分组?

问题描述 投票:0回答:2

我用

做了一张桌子
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 分钟间隔进行分组的查询如何?

sql business-intelligence olap duckdb
2个回答
2
投票

添加一刻钟的表达式:

(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
会截断除法结果的小数部分。


0
投票

更简单的方法是使用

time_bucket

示例:

SELECT time_bucket(INTERVAL '15m', createdat) AS bucket, SUM(tickets)
FROM counter
GROUP BY bucket
ORDER BY bucket;
© www.soinside.com 2019 - 2024. All rights reserved.