2016-09-10 2 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 안녕하세요. 코드를 살펴보고 테스트하면 덥고 차가운 물에 대해 하나의 행을 반환하지만 반환 할 데이터에 각 레코드의 덥고 차가운 물 데이터를 포함 할 행이 하나 있어야합니다. "막스"를 사용하여 방금 하나를 반환했습니다. 고통 스럽군요. 이게 가능하다고 생각하니? – 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

관련 문제