2014-11-21 39 views
0

我有这个查询,其中我想要做的是如果id和值为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 

我一直在这个努力了几次,它不工作,原因是,当我检查了数据库,问题是该行不为空,之所以它不是后的第一个“何时”是因为该行不存在。

的数据看起来像这样

|  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 AM。这是我所期待的输出:

|  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选择,发现有一个为时间9:05 AM排不出,但732有是。

这可能没有实际上做一个INSERT,只是输出0.11值?

回答

1

我认为你的逻辑有点偏离。它正在寻找与731连续的NULL值。它不寻找缺失的行。相反,试试这个:

COALESCE(ROUND(MAX(CASE WHEN id = "731" THEN value END), 3), 0.11) 
+0

谢谢!它的工作现在!真棒真棒真棒! – hocuspocus31 2014-11-22 00:11:58

相关问题