| 对齐目标 | 把每行时间归入 5 分钟/1 小时/1 天等窗口,作为 GROUP BY 键 |
|---|---|
| 通用思路 | bucket = floor(epoch(t) / 窗口秒数) * 窗口秒数 |
| 函数写法 | date_trunc('hour', ts)(PostgreSQL)、toStartOfInterval(ts, INTERVAL 1 HOUR)(ClickHouse) |
示例
示例
-- 通用取整写法(窗口 300 秒)
SELECT floor(extract(epoch FROM ts) / 300) * 300 AS bucket_s,
avg(value) AS avg_value,
count(*) AS samples
FROM metrics
WHERE ts >= now() - INTERVAL '1 day'
GROUP BY bucket_s
ORDER BY bucket_s;跨库对照时先确认时区与周起点规则;报表口径固定后把桶表达式封装成视图或函数,避免每处重写。