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

Grafana对接Postgres:工单耗时平均值计算问题求助

问题分析与SQL修正

原代码核心问题

  1. 外层查询仅计算了lol的平均值,未选择time列,因此无法查看时间维度的数据
  2. 子查询分组逻辑偏差:GROUP BY updated_on, ticket_id会将每个工单的每一条更新记录单独分组,此时SUM(time_spent_minutes)仅代表该工单在当前更新时间点的耗时总和,并非工单的总耗时,最终计算的平均值并非真正的工单平均耗时

修正方案(分场景)

场景1:按时间(updated_on)统计该时间点的工单平均耗时

如果需要按时间维度查看每个时间点下所有工单的平均耗时,调整代码如下:

SELECT 
  m.updated_on AS "time",
  AVG(m.total_time_per_ticket) AS avg_ticket_time
FROM (
  SELECT 
    ticket_id,
    updated_on,
    SUM(time_spent_minutes) AS total_time_per_ticket
  FROM ticket_messages
  WHERE admin_id IN ('20439','20457','20291','20371','20357','20235','20449','20355','20488')
  GROUP BY ticket_id, updated_on
) AS m
GROUP BY m.updated_on
ORDER BY m.updated_on;

说明:子查询先按工单+时间分组,计算每个工单在对应时间的总耗时;外层再按时间分组,计算该时间点所有工单的平均耗时,同时保留time列。

场景2:查看每个工单的耗时及对应更新时间

如果需要输出每个工单在对应时间的总耗时、单条更新的平均耗时,直接按工单+时间分组即可:

SELECT 
  ticket_id,
  updated_on AS "time",
  SUM(time_spent_minutes) AS total_time,
  AVG(time_spent_minutes) AS avg_time_per_update
FROM ticket_messages
WHERE admin_id IN ('20439','20457','20291','20371','20357','20235','20449','20355','20488')
GROUP BY ticket_id, updated_on
ORDER BY updated_on, ticket_id;

场景3:按天统计工单日均平均耗时

如果需要按天(或其他时间粒度)统计,可对updated_on做时间截断(以MySQL为例):

SELECT 
  DATE(m.updated_on) AS "date",
  AVG(m.total_time_per_ticket) AS daily_avg_ticket_time
FROM (
  SELECT 
    ticket_id,
    updated_on,
    SUM(time_spent_minutes) AS total_time_per_ticket
  FROM ticket_messages
  WHERE admin_id IN ('20439','20457','20291','20371','20357','20235','20449','20355','20488')
  GROUP BY ticket_id, updated_on
) AS m
GROUP BY DATE(m.updated_on)
ORDER BY DATE(m.updated_on);

内容的提问来源于stack exchange,提问作者Hugo Hora

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 16:45:44