mysql вычисление разницы временных меток предыдущей строки и группы по нескольким объектам - PullRequest
0 голосов
/ 27 апреля 2018

Я пытаюсь создать отчет для базы данных Icinga2.

Я хочу видеть состояние раз в день на хост для каждой услуги.

У меня есть следующая структура данных:

Колонки:

State_Time> Время, когда состояние объекта мониторинга изменилось с A на B

State> Состояние, в котором находится объект (A, B ..)

Last_State> Состояние, в котором находился объект до текущего времени

Имя хоста> Имя объекта хоста

Servicename> Имя объекта службы

Я хочу, чтобы отчет выглядел примерно так:

host  | service | day | State A % | State B %
a.b.c | srvxyz  |1.1.1|        70 |        30

Так что я в основном могу видеть, как доступность была в процентах.

Из того, что я думаю как-то мне нужно:

  • Группировка по имени хоста, Группировка по имени службы, Группировка по дате поля DateTime
  • Рассчитать и суммировать время каждого события до предыдущего в зависимости от состояния

Что у меня пока есть:

select
    sum(state_time_usec),
    max(name1),
    max(name2),
    max(date(state_time)),
    max(state)
from
    icinga_statehistory
    inner join icinga_objects on icinga_objects.object_id = icinga_statehistory.object_id

group by icinga_objects.object_id,date(state_time),state

order by state_time desc

Но я не знаю, как начать с вычисления предыдущего ряда. Можете ли вы указать мне направление или у вас есть идеи? Спасибо!

1 Ответ

0 голосов
/ 27 апреля 2018

Вы можете создать ранг для своей таблицы, например:

@curRank := @curRank + 1 AS rank

И внутреннее соединение к одной таблице с

@curRank := @curRank + 2 AS rank

Таким образом, у вас будет предыдущее значение. С помощью этой таблицы вы сможете рассчитать, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...