Проверьте, существует ли строка и не выводит ли она конкретное значение
У меня есть этот запрос, в котором я пытаюсь сделать, если идентификатор и значение равно нулю, он просто покажет значение 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)