我用
做了一张桌子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 分钟间隔进行分组的查询如何?
添加一刻钟的表达式:
(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
会截断除法结果的小数部分。
更简单的方法是使用
time_bucket
示例:
SELECT time_bucket(INTERVAL '15m', createdat) AS bucket, SUM(tickets)
FROM counter
GROUP BY bucket
ORDER BY bucket;