powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как просуммировать время простоя?
4 сообщений из 4, страница 1 из 1
Как просуммировать время простоя?
    #39427562
sergey_privacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть у меня таблица с полями:
Id - уникальный идентификатор с автоинкрементом
Interface - номер интерфейса
Status - состояние интерфейса. Поле типа "Enum", значения только 1 или 2.
Date - дата
Time -время события
Сначала происходит событие 2, т.е. интерфейс упал. Через какое то время статус становится 1 - интерфейс поднялся. Таких событий за день или даже за час может быть несколько. Мне нужно выбрать номера интерфейсов и по каждому посчитать суммарное время простоя. Т.е. сначала выбрать пары, где событие стало 1, вычесть время события, произошедшего ранее (со статусом 2), вычислить разницу и просуммировать эти дельты с выборкой по каждому каналу в отдельности.
...
Рейтинг: 0 / 0
Как просуммировать время простоя?
    #39427638
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фактически тебе для каждого "падения" нужно найти соответствующий ему "подъём". Иными словами, для каждой записи со Status=1 (если это означает "падение", конечно) найти ту запись со Status=2, у которой DateTime минимальное, но всё-таки больше.

Это было бы несложно, кабы Вы не поделили дату и время на два поля.

Покажите DDL таблицы, станет понятно, как правильно собирать полную дату-время.
...
Рейтинг: 0 / 0
Как просуммировать время простоя?
    #39427669
sergey_privacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE IF NOT EXISTS `NewLogs` (
  `Id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `IdTunnel` smallint(3) unsigned NOT NULL DEFAULT '0',
  `Status` enum('1','2') NOT NULL,
  `Date` date DEFAULT NULL,
  `Time` time DEFAULT NULL,
  UNIQUE KEY `Id` (`Id`),
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=987526 ;


Задача стоит разовая, сейчас я как раз переделываю в нормальный вид. Я могу перекинуть данные в другую временную таблицу так, чтобы поле datetime было в одну кучу.
...
Рейтинг: 0 / 0
Как просуммировать время простоя?
    #39427718
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergey_privacyЗадача стоит разовая
Тогда упрощаем себе жизнь, плюя на производительность:
Код: sql
1.
2.
3.
4.
CREATE VIEW v_logs 
AS
SELECT IDTunnel, Status, CAST(CONCAT(Date, ' ', Time) AS DATETIME) dt
FROM NewLogs;


Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT t1.IDTunnel, t1.dt, MIN(t2.dt) dt2, DATEDIFF('s',t1.dt,MIN(t2.dt)) delta
FROM v_logs t1, v_logs t
WHERE t1.IDTunnel = t2.IDTunnel
AND t1.dt < t2.dt
AND t1.Status=1
AND t2.Status=2
GROUP BY t1.IDTunnel, t1.dt;



Но предварительно следует убедиться, что в таблице нет "кривых" записепй - двух падений или двух подъёмов подряд.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как просуммировать время простоя?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]