우리가 약 100 온도 독자와 큰 건물이 있고 각각은 온도 분마다 수집 상상해보십시오.
내가
가 오히려 큰 테이블이 (~ 100m) 다음과 같은 열이있는 행 :표 TempEvents :
Timestamp - one entry per minute
Reader ID - about 100 separate readers
Temperature - Integer (-40 -> +40)
타임 스탬프 및 Reader ID는 테이블에 + 일차, 이차 키입니다. 나는 모든 타임 스탬프를 찾는 질의를 수행하고자합니다.
reader_01 = 10도,
reader_02 = 15도,
reader_03 = 20도입니다. 즉
이 같은 :
SELECT Timestamp FROM TempEvents
WHERE (readerID=01 AND temperature=10)
AND (readerID=02 AND temperature=15)
AND (readerID=03 AND temperature=20)
==> 타임 스탬프의 목록 결과 :
이Timestamp::
2016-01-01 05:45:00
2016-02-01 07:23:00
2016-03-01 11:56:00
2016-04-01 23:21:00
위의 쿼리가 하나의 행에서 모든 조건을 포함하지 않기 때문에 아무 것도 반환하지 않습니다 일단. 모든 판독기가 조건과 일치해야하므로 조건 사이에 OR을 사용하면 원하는 결과가 생성되지 않습니다.
INTERSECT를 사용하여, 나는하여 결과를 얻을 수 있습니다
SELECT * FROM
(SELECT Timestamp FROM TempEvents WHERE readerID=01 AND temperature=10
INTERSECT SELECT Timestamp FROM TempEvents WHERE readerID=02 AND temperature=15
INTERSECT SELECT Timestamp FROM TempEvents WHERE readerID=03 AND temperature=20
)
GROUP BY Timestamp ORDER BY Timestamp ASC;
위의 쿼리가 매우 비용이 많이 드는하고 실행하는 데 약 5 분 정도 소요됩니다.
결과를 얻는 더 좋은 (더 빠른) 방법이 있습니까?
SELECT 소인 TempEvents FROM WHERE (readerID = 01, 온도 = 10) OR (readerID = 02, 온도 = 15) OR (readerID = 03, 온도 = 20)? – neutrino
있는지,하지만 약되지 않음 : 'TempEvents readerid에 의해 ((1,10), (2,15), (3,20)) 그룹 (readerid, 온도), 온도 가진 계수로부터 타임 스탬프 을 선택 (distinct readerid) = 3;' –
위의 문제에 대해 솔직히 말해서 가장 간단한 것은 @neutrino가 제안한 것입니다.그의 솔루션을 사용하면서 얻는 문제점은 무엇입니까 – XING