Как использовать переменную суммирования в запросе графана? - PullRequest
0 голосов
/ 21 сентября 2019

Я настраиваю комбинацию Grafana и MariaDB.Одна из моих целей - показать кумулятивную сумму из значений в таблице как временной ряд Grafana.

Мне кажется, что в запросе SQL мне нужна переменная суммирования.

Такой запрос работает , если я ввожу его вручную (например, в HeidiSQL) в базу данных. не работает, когда я перенаправляю схему запроса в веб-интерфейс Grafana.

Пример:

У меня есть такая таблица

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

Я хочу показать совокупную сумму Сачкостена.Он работает вручную в базе данных, когда я выполняю:

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"

Когда я ввожу то же самое в Графану, я получаю ошибки при использовании переменной @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

Есть ли здесь какой-нибудь герой, который знает, как заставить такие переменные запроса работать в Графане?Или другие способы сделать с этой накопленной суммой?

1 Ответ

0 голосов
/ 21 сентября 2019

Я предполагаю, что вы не можете объединить два оператора в одном запросе.Попробуйте установить переменную в подзапросе:

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, чтобы убедиться, что.

...