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

基于MySQL构建Grafana时序数据的查询方案求助

Grafana 对接 MySQL 构建时序数据的正确查询语句

问题背景

将MySQL数据库作为数据源接入Grafana,需基于现有表构建时序数据,原查询触发MySQL 1055错误,核心需求是编写符合规范的正确查询语句。

原错误查询:

SELECT 
 $__timeGroupAlias(date,1h,0),
 COUNT(distinct(id)) AS id,
 'result' as metric
 FROM db.table
 WHERE
    $__timeFilter(date)
    AND result = 'pass'
    GROUP BY DATE_FORMAT(date, '%Y-%m-%d %H:00:00');

错误核心原因

MySQL默认开启ONLY_FULL_GROUP_BY模式,要求SELECT列表中所有非聚合函数的字段必须出现在GROUP BY子句中。原语句中$__timeGroupAlias生成的时间列、'result' as metric均未加入GROUP BY,同时手动写DATE_FORMAT分组和Grafana时间宏逻辑重复,导致冲突。

正确查询写法

写法一:利用列序号+常量分组

SELECT 
  $__timeGroupAlias(date, 1h, 0),
  COUNT(DISTINCT(id)) AS pass_count,
  'pass_result' AS metric
FROM db.table
WHERE
  $__timeFilter(date)
  AND result = 'pass'
GROUP BY 1, metric;
  • GROUP BY 1指代SELECT列表的第一列(即Grafana宏生成的时间分组列)
  • metric是常量值,加入GROUP BY符合MySQL模式要求,不会改变分组逻辑
  • 将别名id改为pass_count,避免与原表id字段混淆,语义更清晰

写法二:直接使用Grafana时间宏分组

SELECT 
  $__time(date) AS time,
  COUNT(DISTINCT(id)) AS pass_count,
  'pass_result' AS metric
FROM db.table
WHERE
  $__timeFilter(date)
  AND result = 'pass'
GROUP BY $__timeGroup(date, 1h, 0), metric;
  • $__timeGroup宏会自动生成与时间过滤匹配的分组逻辑,替代手动写DATE_FORMAT
  • 同样将metric加入GROUP BY,满足MySQL的模式约束

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 11:22:42