【发布时间】:2015-01-20 05:34:57
【问题描述】:
我有这个查询,其中我想要做的是,如果 id 和值为 null,它只会在该行为 null 的位置显示值 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 |
我检查了 id 731 的 val 并仅使用该 ID 进行了单独的 SELECT,发现在上午 9:05 的时间没有行,但在 732 中有。
如果不实际执行 INSERT 并仅输出 0.11 值,这是否可能?
【问题讨论】:
标签: mysql row exists not-exists