Как исправить сброс увеличения значения в MySql Table

0

Я использую таблицу MySql, чтобы сохранить значения датчиков, которые я собираю через RS485. Датчик суммирует заряд, который уже попал в аккумулятор. Он положителен при разряде и отрицательном заряде.

К сожалению, я перезагружаю измерительный модуль при несчастном случае. Поэтому мой заряд снижается на 161 А/ч от одной строки до другой, и новые данные связаны с этой нулевой точкой. ЗДЕСЬ вы можете увидеть мою структуру таблицы со значением сброса для заряда, работы и времени. Строка, в которой произошел инцидент, выделена синим цветом.

Как я могу исправить этот сброс наилучшим образом? Я думал о создании таблицы с resetId (s) в качестве индекса (для случая, когда это происходит снова) и смещения для колонок. Но я havend все же нашел способ интегрировать это в мои запросы.

Я использую данные для статистики. Больше всего разницы между часами или днями или Top10 для дней с лучшим зарядом. Пример запроса для dayStats (за время до инцидента) показан ниже:

SELECT 
   id                                                        AS _cid, 
   curtime                                                   AS mynow, 
   Date_format(curtime, '%H%:00')                            AS date, 
   Round(Min(CURRENT) / 10, 2)                               AS 'min current', 
   Round(Avg(CURRENT) / 10, 2)                               AS 'avg current', 
   Round(Max(CURRENT) / 10, 2)                               AS 'max current', 
   Round(Min(power) / 1000, 2)                               AS 'min power', 
   Round(Avg(power) / 1000, 2)                               AS 'avg power', 
   Round(Max(power) / 1000, 2)                               AS 'max power', 
   charge / 1000                                             AS 'charge', 
   Round(( ( (SELECT charge 
              FROM   MeasurementData.SolarPower 
              WHERE  Max(_cid) = id) - charge ) / 1000 ), 2) AS chgDiff 
   FROM   MeasurementData.SolarPower 
   WHERE  Day(curtime) = Day('2018-05-05 12:00:00') 
   GROUP  BY Hour(curtime) 
   ORDER  BY mynow DESC 

Это будет нормальный выход для статистики дня

Статистика недели - это почти тот же запрос. Но здесь сброс показывает его effetc..

    SELECT 
       id                                                        AS _cid, 
       curtime                                                   AS mynow, 
       Date_format(curtime, '%d%.%m.%Y')                         AS date, 
       Date_format(curtime, '%W')                                AS weekday, 
       Round(Min(CURRENT) / 10, 2)                               AS 'cur-min', 
       Round(Avg(CURRENT) / 10, 2)                               AS 'cur-avg', 
       Round(Max(CURRENT) / 10, 2)                               AS 'cur-max', 
       Round(Min(power) / 1000, 2)                               AS 'pow-min', 
       Round(Avg(power) / 1000, 2)                               AS 'pow-avg', 
       Round(Max(power) / 1000, 2)                               AS 'pow-max', 
       Round((SELECT charge 
              FROM   MeasurementData.SolarPower
              WHERE  Max(_cid) = id) / 1000, 2)                  AS chg, 
       Round((((SELECT charge 
                  FROM   MeasurementData.SolarPower
                  WHERE  Max(_cid) = id) - charge ) / 1000 ), 2) AS chgDiff 
FROM   MeasurementData.SolarPower
WHERE  curtime >= Date_sub('2018-05-05 12:00:00', interval 6 day) 
GROUP  BY DATE 
ORDER  BY mynow DESC 

Какие выходы: ЧТО Здесь инцидент сброса хорошо видно.

Кстати... Я не слишком хорош в этом материале SQL, и показанные запросы довольно медленные. Любые предложения по их улучшению?

Спасибо, ребята, заранее.

  • 1
    См. Meta.stackoverflow.com/questions/333952/…
  • 0
    (Не имеет отношения к «сбросу»). Я предлагаю вам избавиться от столбца mynow и сделать так, чтобы ORDER BY говорил то же самое, что и GROUP BY (плюс DESC ).
Теги:
mariadb
mariasql

1 ответ

0

Вы определили, что определенное значение в таблице является "неправильным"? Затем используйте UPDATE с предложением WHERE, чтобы указать конкретную строку для изменения.

Вы определили, что определенный столбец в таблице для определенного временного диапазона необходимо скорректировать с помощью некоторого постоянного значения? Затем используйте UPDATE с предложением WHERE, чтобы указать конкретные строки для изменения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню