在 Grafana v6.5.2 中使用 MySQL 进行累积和

问题描述 投票:0回答:1

我现在正在尝试使用 Singlestat 面板来显示特定时间的累积 uph。 所需的输出只是 4 位数字(例如:7000)。 该表采用小时格式,显示累计 uph(每小时单位数)。

这在 Navicat 中运行良好并显示了所需的结果。

下面是MySQL查询。但每当我运行它时它都会显示此错误。 “错误 1064:您的 SQL 语法有错误;请检查与您的 MySQL 服务器版本相对应的手册,了解在 'SET @cumulative_uphB := 0; 附近使用的正确语法”

MySQL 查询:

结果:

mysql grafana cumulative-sum
1个回答
0
投票

您当前的查询存在许多问题。

让我们从最里面的查询开始:

SELECT
    DATE_FORMAT(NOW(), '%H') AS hour,
    uph AS incremental_uph
FROM tb_monthly
WHERE
    (
        (DATE_FORMAT(NOW(), '%H') BETWEEN '06' AND '17')
        OR
        (DATE_FORMAT(NOW(), '%H') BETWEEN '18' AND '23')
        OR
        (DATE_FORMAT(NOW(), '%H') BETWEEN '00' AND '05')
    )
    AND customer = 'TSB'
    AND xmodel = 'FJ1XC'
    AND line = '3'
    AND assembly = 'MOTOR'
GROUP BY DATE_FORMAT(NOW(), '%H')

您应该收到如下错误:

错误代码:1055。SELECT 列表的表达式 #2 不在 GROUP BY 子句中,并且包含非聚合列“tb_monthly.uph”,该列在功能上不依赖于 GROUP BY 子句中的列;这与 sql_mode=only_full_group_by

不兼容

因为最里面的查询是非确定性的。如果它没有引发错误,则必须禁用

ONLY_FULL_GROUP_BY
,这不好(请参阅only_full_group_by 模式的好处是什么?)。

考虑以下三行(猜测是因为您尚未提供示例数据):

时间 顾客 x模型 线 组装
13 600 交通运输安全委员会 FJ1XC 3 电机
14 700 交通运输安全委员会 FJ1XC 3 电机
15 800 交通运输安全委员会 FJ1XC 3 电机

鉴于当前时间

15:57:17
(我在撰写本文时的区域设置),您最里面的 SELECT 等于(在 GROUP BY 之前):

小时 增量_uph
15 600
15 700
15 800

现在你的

GROUP BY
想要将其“压缩”到一行。它应该返回
uph
的哪个值?另外,由于
GROUP BY
中的表达式具有恒定值,因此与编写
GROUP BY 'donkey'
相同。

DATE_FORMAT(NOW(), '%H')
子句中的三个
WHERE
标准没有任何作用,因为其中之一永远是正确的。

第一个相当长的 CASE 操作:

CASE
    WHEN time = '06' THEN '1'
    WHEN time = '07' THEN '2'
    ...
    WHEN time = '05' THEN '24'
END AS sequence,

然后将其转换为 SIGNED INT -

ORDER BY CAST(sequence AS SIGNED)
,可以简化为:

IF (time > '05', time - 5, time + 24 - 5) AS sequence,

第二个大CASE操作与嵌套的CASE操作,可以简化为:

CASE
    WHEN time IN ('02', '08', '15', '20') THEN uph * 0.5
    WHEN time IN ('05', '17') THEN uph * 0.75
    ELSE uph
END AS uph

累积可能存在问题

SUM
,具体取决于您预期的累积顺序。应该是
hours.hour
(当前)还是
sequence

最后,正如 Akina 已经指出的那样在评论中,您应该在查询中初始化用户变量,而不是依赖能够执行多个查询。

© www.soinside.com 2019 - 2024. All rights reserved.