다음과 같은 sensorvalue라는 테이블이 있습니다.
station_id sensor_id Timestamp Value
----------------------------------------------------------
1 1 2013-09-04 12:00:00 12.2
1 2 2013-09-04 12:00:00 13.1
1 3 2013-09-04 12:00:00 13.2
1 1 2013-09-04 12:05:00 12.1
1 2 2013-09-04 12:05:00 14.1
1 3 2013-09-04 12:05:00 13.2
1 1 2013-09-04 12:10:00 12.5
1 2 2013-09-04 12:10:00 13.3
1 3 2013-09-04 12:10:00 14.1
station_id 1로 스테이션의 세 센서 모두의 최신 값을 모두 가져 오는 MySQL 쿼리가 필요합니다. 하나의 MySQL 문으로 이것이 가능한지 궁금합니다.
테이블에서 데이터를 가져 왔지만 효율적인 방법은 아닙니다. 이제 먼저 스테이션 1에 대해 모든 다른 센서를 선택한 다음 각 센서에 대해 다른 MySQL SELECT 문을 호출합니다. 일부 스테이션에는 10 개 이상의 센서가 있으므로이 접근 방식에서는 데이터베이스에서 데이터를 가져 오기 위해 최소 11 개의 MySQL 문이 필요합니다.
이것을 하나의 MySQL 문에 포함하고 싶습니다. 가능합니까? 그리고 어떻게?
모든 스테이션의 모든 센서에 대한 최신 판독 값을 검색합니다.
SELECT s.*
FROM (SELECT station_id, sensor_id, MAX(Timestamp) as max_timestamp
FROM sensorvalue
GROUP BY station_id, sensor_id
) m
JOIN sensorvalue s
ON s.station_id = m.station_id
AND s.sensor_id = m.sensor_id
AND s.Timestamp = m.max_timestamp
특정 역으로 제한합니다.
SELECT s.*
FROM (SELECT station_id, sensor_id, MAX(Timestamp) as max_timestamp
FROM sensorvalue
WHERE station_id = 1
GROUP BY station_id, sensor_id
) m
JOIN sensorvalue s
ON s.station_id = m.station_id
AND s.sensor_id = m.sensor_id
AND s.Timestamp = m.max_timestamp
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다