Я использую таблицу 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, и показанные запросы довольно медленные. Любые предложения по их улучшению?
Спасибо, ребята, заранее.
Вы определили, что определенное значение в таблице является "неправильным"? Затем используйте UPDATE
с предложением WHERE
, чтобы указать конкретную строку для изменения.
Вы определили, что определенный столбец в таблице для определенного временного диапазона необходимо скорректировать с помощью некоторого постоянного значения? Затем используйте UPDATE
с предложением WHERE
, чтобы указать конкретные строки для изменения.
mynow
и сделать так, чтобыORDER BY
говорил то же самое, что иGROUP BY
(плюсDESC
).