MySql NULLIF меняет значение - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть этот запрос, который ведет себя очень странно. Я ожидаю получить значения MIN и MAX в заданном временном диапазоне и игнорировать значения, которые равны 0.

По какой-то причине этот запрос возвращает значение, которого нет в базе данных

SELECT
    block_id,
    device_id,
    MAX(NULLIF(meter_reading, 0)) max_reading,
    MIN(NULLIF(meter_reading, 0)) min_reading,
    DATE_FORMAT(FROM_UNIXTIME(sensor_time), '%Y-%m-%d') AS time_frame
FROM
    tbl_meter_data
WHERE
    plant_id = 114
        AND sensor_time BETWEEN 1586820600 AND 1586871000
        AND HOUR(FROM_UNIXTIME(sensor_time)) BETWEEN 5 AND 18
        AND ignore_status = 0
GROUP BY block_id , device_id, time_frame;

Это результат, который он выдает

enter image description here

Где эти значения отсутствуют в базе данных

Если я запускаю то же самое запрос без NULLIF Я получаю правильные значения

SELECT
    block_id,
    device_id,
    MAX(meter_reading) max_reading,
    MIN(meter_reading) min_reading,
    DATE_FORMAT(FROM_UNIXTIME(sensor_time), '%Y-%m-%d') AS time_frame
FROM
    tbl_meter_data
WHERE
    plant_id = 114
        AND sensor_time BETWEEN 1586820600 AND 1586871000
        AND HOUR(FROM_UNIXTIME(sensor_time)) BETWEEN 5 AND 18
        AND ignore_status = 0
GROUP BY block_id , device_id, time_frame;

Это результат без NULLIF

enter image description here

Я также столкнулся с той же проблемой, пока используя ROUND () для этого параметра (meter_reading). Все значения были изменены благодаря ROUND (), хотя значения не были дробными.

Примечание: meter_reading тип данных float


Это пример набора данных, если вы хотите проверить: Набор данных


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