Проверьте, существует ли строка и не выводит ли она конкретное значение

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

SELECT FROM_UNIXTIME(t_stamp/1000, '%m/%d/%Y %l:%i %p') as t_stamp,

    ROUND(MAX(
            CASE 
            WHEN id = "731" AND value IS NULL THEN 0.11
            WHEN id = "731" THEN value
            END
            ),3
        ) as Val1,

    ROUND(MAX(
            CASE 
            WHEN id = "732" AND value IS NULL THEN 0.11
            WHEN id = "732" THEN value
            END
            ),3
        ) as Val2

FROM table1
WHERE id IN ("731", "732")  and

from_unixtime(t_stamp/1000) BETWEEN "2014-11-01 09:00:00" AND "2014-11-01 12:00:00"

GROUP BY DATE(from_unixtime(t_stamp/1000)), HOUR(from_unixtime(t_stamp/1000)), MINUTE(from_unixtime(t_stamp/1000)) DIV 1

Я пробовал это несколько раз, и это не работает, и причина в том, что когда я проверял базу данных, проблема заключалась в том, что строка не нулевая, причина, по которой она не следует за первым "WHEN", заключается в том, что строка не существует.

Данные выглядят так

|       t_stamp         |   Val1    |   Val2    |
|   11/01/2014 9:00 AM  |   0.022   |   0.044   |
|   11/01/2014 9:01 AM  |   0.023   |   0.045   |
|   11/01/2014 9:02 AM  |   0.022   |   0.044   |
|   11/01/2014 9:03 AM  |   0.022   |   0.044   |
|   11/01/2014 9:04 AM  |   0.022   |   0.044   |
|   11/01/2014 9:05 AM  |   NULL    |   0.046   |
|   11/01/2014 9:06 AM  |   0.023   |   0.040   |

Там нет строки для 9:05 утра. Это результат, на который я надеялся:

|       t_stamp         |   Val1    |   Val2    |
|   11/01/2014 9:00 AM  |   0.022   |   0.044   |
|   11/01/2014 9:01 AM  |   0.023   |   0.045   |
|   11/01/2014 9:02 AM  |   0.022   |   0.044   |
|   11/01/2014 9:03 AM  |   0.022   |   0.044   |
|   11/01/2014 9:04 AM  |   0.022   |   0.044   |
|   11/01/2014 9:05 AM  |   0.11    |   0.046   |
|   11/01/2014 9:06 AM  |   0.023   |   0.040   |

Я проверил val для идентификатора 731 и сделал отдельный SELECT только с этим идентификатором и обнаружил, что для времени 9:05 нет строки, но в 732 есть.

Возможно ли это, не делая INSERT и просто выводя значение 0,11?

1 ответ

Решение

Я думаю, что ваша логика немного не в порядке. Ищет NULL значение в строке с 731. Это не ищет пропущенную строку. Вместо этого попробуйте это:

COALESCE(ROUND(MAX(CASE WHEN id = "731" THEN value END), 3), 0.11)
Другие вопросы по тегам