如何在grafana查询中使用累积求和变量?

时间:2019-09-21 12:54:10

标签: mysql sql mariadb grafana

我正在设置Grafana和MariaDB的组合。我的目标之一是显示表格中值的累计总和作为Grafana时间序列。

我似乎在SQL查询中需要一个求和变量。

如果我在数据库上手动输入查询(例如在HeidiSQL中),则这样的查询可行。当我将查询方案接管到Grafana Web界面时,它不起作用

示例:

我有一张这样的桌子

`ID` INT(11) NOT NULL AUTO_INCREMENT,
`Datum` DATE NOT NULL,
'Sachkosten` INT(11) NOT NULL

我想显示Sachkosten的累积总和。当我执行时,它可以在数据库上手动工作:

set @csum := 0;
SELECT
    UNIX_TIMESTAMP(Datum) as time_sec,
    Datum,
    Sachkosten as value,
   'Sachkosten' as metric,
   (@csum := @csum + Sachkosten) as cumulative_sum
FROM aufwand
ORDER BY Datum ASC

上面的直接在数据库上按预期工作:第五列是第三列的累积总和:

"1569801600"    "2019-09-30"    "-6000" "Sachkosten"    "-6000"
"1569801600"    "2019-09-30"    "35000" "Sachkosten"    "29000"
"1572220800"    "2019-10-28"    "-4000" "Sachkosten"    "25000"

当我在Grafana中输入相同的内容时,在使用@csum变量时会出现错误。在上面的示例中:

Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT
UNIX_TIMESTAMP(Datum) as time_sec,
Datum,
Sachkosten as value' at line 2

我们这里有一些英雄,知道如何使这种查询变量在Grafana中工作吗?还是采用其他方式来计算该累计和?

1 个答案:

答案 0 :(得分:0)

我猜测您不能在一个查询中合并两个语句。尝试在子查询中设置变量:

SELECT UNIX_TIMESTAMP(Datum) as time_sec, Datum, Sachkosten as value,
       'Sachkosten' as metric,
       (@csum := @csum + Sachkosten) as cumulative_sum
FROM aufwand CROSS JOIN
     (SELECT @csum := 0) params
ORDER BY Datum ASC;

或者,也许会起作用:

SELECT UNIX_TIMESTAMP(Datum) as time_sec, Datum, Sachkosten as value,
       'Sachkosten' as metric,
       SUM(Sachkosten) OVER (ORDER BY Datum) as cumulative_sum
FROM aufwand CROSS JOIN
     (SELECT @csum := 0) params
ORDER BY Datum ASC;

请注意,在较新版本的MySQL中,ORDER BY可能不会影响累积和的顺序。您需要使用带有ORDER BY的子查询来确保。