2013-10-27 35 views
0

我有一個超簡單查詢SELECT TIME, VALUE, TYPE from mylog;MySQL從另一行中選擇一行中的值

我的查詢顯示下一個:

| TIME   | VALUE |  TYPE | 
------------------------------------- 
| 2013-09-26 04:45| 18.7 |   1 | 
| 2013-09-26 04:45| 84.5 |   2 | 
| 2013-09-26 05:00| 18.6 |   1 | 
| 2013-09-26 05:00| 84.7 |   2 | 

但我想查詢顯示下一個:

| TIME   | VALUE A | VALUE B | 
---------------------------------------- 
| 2013-09-26 04:45| 18.7 | 85.5  | 
| 2013-09-26 05:00| 18.6 | 84.7  | 

其中VALUE AType = 1VALUE BType = 2

所有數據都存儲在只有一個表,幷包含列:

TIME, VALUE, TYPE 

回答

1
SELECT 
    `TIME`, 
    MIN(IF(`TYPE`=1,`VALUE`,99999999)) AS `Value A`, 
    MIN(IF(`TYPE`=2,`VALUE`,99999999)) AS `Value B` 
FROM mylog 
GROUP BY `TIME` 

99999999 menaing 「無可用值」

編輯

我這樣做沒有用NULL,因爲它會拒絕我的MIN(或MAX)。如果你想NULL而必須在

SELECT `TIME`, 
    IF(`Value A`=99999999,NULL,`Value A`), 
    IF(`Value B`=99999999,NULL,`Value B`) 
FROM (
    -- ... 
) AS baseview 
+0

爲什麼99999999而不是0或NULL,當有「沒有價值可用」像它應該可以闡明你爲什麼選擇99999999? –

+0

99999999和0是相同的東西 - 我不知道,如果負值可能會發生,所以我選擇「不高比例」作爲標記。 NULL不適用於「MIN」或「MAX」。看我的編輯! –

+0

+1解釋錯過了你的觀點 –

1
SELECT TIME, 
MIN(CASE WHEN TYPE= '1' THEN VALUE ELSE NULL END) AS VALUE_A, 
MIN(CASE WHEN TYPE= '2' THEN VALUE ELSE NULL END) AS VALUE_B From mylog GROUP BY time 

SQL fiddle

+0

它不工作wraop這一點,就說明值替代 – ManuParra

+1

+1,但仍的情況下TYPE =「1」應區分當Type = 1,以避免鑄造.. –

相關問題