2014-11-21 40 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

相關問題