如何在Vertica数据库(vsql)中按时间戳范围对行数据进行聚合统计
Vertica(vsql)按1小时窗口聚合带宽数据实现方案
你给出的预期结果是将每个小时整点作为窗口结束时间,覆盖该时刻及之前1小时内的所有数据,对应的实现SQL如下,直接替换表名即可运行:
SELECT -- 版本适配1:Vertica 9.0+可直接用ceil参数向上取整到小时 DATE_TRUNC('hour', ts, 'ceil') AS ts, -- 版本适配2:低版本Vertica用epoch转换实现向上取整,替换上面的DATE_TRUNC行即可 -- TO_TIMESTAMP(CEIL(EXTRACT(EPOCH FROM ts) / 3600) * 3600) AS ts, -- 如需输出千分位逗号格式,用TO_CHAR包裹sum即可:TO_CHAR(SUM(bandwidth_bytes), '999,999,999') AS bandwidth_bytes SUM(bandwidth_bytes) AS bandwidth_bytes FROM 替换为你的实际表名 GROUP BY 1 ORDER BY ts DESC;
常规自然小时聚合方案
如果你需要的是常规左闭右开的自然小时窗口(即统计[整点, 下一小时整点)区间内的数据),使用如下SQL即可:
SELECT DATE_TRUNC('hour', ts) AS ts, SUM(bandwidth_bytes) AS bandwidth_bytes FROM 替换为你的实际表名 GROUP BY 1 ORDER BY ts DESC;
内容的提问来源于stack exchange,提问作者Praveen Kumar
相关产品推荐
相关产品推荐

