You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按日/周/月维度展示PostgreSQL中的Token数据?

解决方案与建议

1. 是否可以自动按日/周/月维度展示?

完全可以实现自动切换维度展示,核心是在数据查询层做聚合处理,再将聚合结果传给Chart.js渲染。

PostgreSQL聚合查询示例

基于你现有数据结构,无需修改表结构,直接用PostgreSQL的日期函数分组计算:

  • 按日聚合:
SELECT
  DATE(created) AS date,
  SUM(prompt_tokens) AS total_prompt_tokens,
  SUM(completion_tokens) AS total_completion_tokens,
  SUM(total_tokens) AS total_tokens
FROM your_table
GROUP BY DATE(created)
ORDER BY date;
  • 按周聚合(PostgreSQL默认周一为周起始,可通过SET datestyle调整):
SELECT
  DATE_TRUNC('week', created)::DATE AS week_start,
  SUM(prompt_tokens) AS total_prompt_tokens,
  SUM(completion_tokens) AS total_completion_tokens,
  SUM(total_tokens) AS total_tokens
FROM your_table
GROUP BY DATE_TRUNC('week', created)
ORDER BY week_start;
  • 按月聚合:
SELECT
  DATE_TRUNC('month', created)::DATE AS month_start,
  SUM(prompt_tokens) AS total_prompt_tokens,
  SUM(completion_tokens) AS total_completion_tokens,
  SUM(total_tokens) AS total_tokens
FROM your_table
GROUP BY DATE_TRUNC('month', created)
ORDER BY month_start;

前端切换逻辑

在页面添加日/周/月切换按钮,点击时调用对应聚合接口,拿到数据后更新Chart.js实例:

// 切换到周维度的示例逻辑
async function loadWeekData() {
  const res = await fetch('/api/aggregate?period=week');
  const data = await res.json();
  // 更新图表标签与数据
  chart.data.labels = data.map(item => item.week_start);
  chart.data.datasets[0].data = data.map(item => item.total_prompt_tokens);
  chart.update();
}

2. 是否需要修改数据schema?

不需要修改现有schema。当前字段(uuid、各类token数、created)已完全满足聚合需求,created字段的ISO标准时间格式可被PostgreSQL直接解析处理。

如果后续数据量较大,可给created字段添加索引提升查询性能:

CREATE INDEX idx_created ON your_table(created);

额外实用建议

  • 补全空维度数据:若某日/周/月无数据,查询结果不会返回对应条目,Chart.js图表会出现断层。可通过生成连续日期序列,左连接聚合结果补全空值。
  • 优化维度标签显示:将周起始日期格式化为2022-12-19 ~ 2022-12-25,月份格式化为2022年12月,提升图表可读性。
  • 缓存聚合结果:若数据更新频率低,可将聚合结果缓存(如Redis),减少数据库重复查询压力。

内容的提问来源于stack exchange,提问作者Tasmia A.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 21:20:28