2016-09-10 35 views
0

我有一個表格,其中記錄板包含水溫,一個熱水記錄和一個冷水記錄。MySql:從兩條記錄中返回一行數據

我想要做的是構建一個查詢,將返回基於唯一ID的兩個記錄,並只產生一個包含熱水和冷水數據的行。

我讀過這可以使用INNER JOIN來完成,但正如您在下面看到的,我的查詢返回兩行,一個用於熱水,另一個用於冷水。

是否可以生產一個包含熱水和冷水的行?

這是迄今爲止我的查詢:

SELECT h.UniqueID, h.Room, h.AuditDate, h.AuditBy, h.SeqID, h.WaterHot, h.WaterCold 
FROM NXLHR_Hist h 
INNER JOIN NXLHR_Hist b 
ON h.UniqueID = b.UniqueID 
WHERE h.WaterHot < '50' OR h.WaterHot > '66.0' OR h.WaterCold > '20.0' 
AND DATE(h.CompStamp) BETWEEN DATE('2015-09-08') AND DATE('2016-09-10') 
ORDER BY h.Room ASC 

即使我使用GROUP BY的UniqueID我仍然得到兩行。

任何幫助將是偉大的,我提前感謝您的時間。

問候。

回答

1
SELECT h.UniqueID, h.Room, h.AuditDate, h.AuditBy, h.SeqID, h.WaterHot, h.WaterCold 
FROM NXLHR_Hist h 
INNER JOIN NXLHR_Hist b 
ON h.UniqueID = b.UniqueID 
WHERE h.WaterHot < '50' AND h.WaterHot > '66.0' AND h.WaterCold > '20.0' 
AND DATE(h.CompStamp) BETWEEN DATE('2015-09-08') AND DATE('2016-09-10') 
ORDER BY h.Room ASC 

使用此查詢,所以希望它爲你的作品

+0

感謝您的回覆,但該查詢不返回任何行。但再次感謝您的嘗試。 – DCJones

+0

@Gordon Linoff我試過你的代碼,但它又返回兩行,一個用於熱水,一個用於冷水。 – DCJones

+0

@Gordon Linoff再次嗨。查看代碼和測試,它確實返回了一行熱水和冷水,但是,我需要的是返回的數據有一行包含每條記錄的熱水和冷水數據。使用「Max」只返回一個。對不起是一個痛苦。你認爲這是可能的嗎? – DCJones

1

據推測,您的目的是更好地通過這一WHERE條款提供:

WHERE (h.WaterHot < 50 OR 
     h.WaterHot > 66.0 OR 
     h.WaterCold > 20.0 
    ) AND 
     DATE(h.CompStamp) BETWEEN DATE('2015-09-08') AND DATE('2016-09-10') 

注意括號。您似乎想要在該時間段內水溫超出範圍的任何記錄。另外,我假設這些值是數字。不要在數字周圍使用單引號;它會誤導人們,有時會誤導SQL優化器。

你的條件是解析爲:

WHERE h.WaterHot < 50 OR 
     h.WaterHot > 66.0 OR 
     (h.WaterCold > 20.0 AND 
     DATE(h.CompStamp) BETWEEN DATE('2015-09-08') AND DATE('2016-09-10') 
    ) 

其實,我想這是寫:

WHERE (h.WaterHot < 50 OR 
     h.WaterHot > 66.0 OR 
     h.WaterCold > 20.0 
    ) AND 
     h.CompStamp >= DATE('2015-09-08') AND 
     h.CompStamp < DATE('2016-09-11') 

該版本允許發動機在CompStamp使用索引。

你想可能是查詢,則看起來是這樣的:

SELECT h.Room, MAX(h.WaterHot), MIN(h.WaterHot), MAX(h.WaterCold) 
FROM NXLHR_Hist h 
WHERE (h.WaterHot < 50 OR 
     h.WaterHot > 66.0 OR 
     h.WaterCold > 20.0 
    ) AND 
     h.CompStamp >= DATE('2015-09-08') AND 
     h.CompStamp < DATE('2016-09-11') 
GROUP BY h.Room; 
+0

非常感謝。它在我的SQL編輯器中工作,所以我現在嘗試讓我的PHP腳本運行。再次,非常感謝。 – DCJones