PostgreSQL 里怎么 group by「临近的时间」?

比如有个表有时间字段 t。我想按临近的时间来进行 group by。比如「临近」的定义为「在五分钟内」,那么把「12:02」和「11:58」放到同一个组里。当然同一个组里可以有很多个时间,它们的最大差值不超过指定的时间差。

阅读 5.4k
2 个回答

抛个砖,不是最准确的,因为是按照绝对时间group的(例如 10:00:00, 10:05:00)
如果要按照当前时间往前推5分钟,可以稍作修改

SELECT
    TIMESTAMP WITH TIME ZONE 'epoch' +
    INTERVAL '1 second' * round((extract('epoch' from t) / 300) * 300) 
    as t,
    count(something)
FROM some table
WHERE …
GROUP BY 
round(extract('epoch' from t) / 300), name
新手上路,请多包涵

非要用SQL的话,应该需要游标之类的。单一GROUP BY应该不能解决楼主的问题。

推荐问题