2012-06-29 4 views
1

디바이스에 대한 판독 값을 보유한 데이터베이스가 있습니다. 장치에서 최신 읽기를 선택할 수있는 쿼리를 작성하려고합니다. 겉으로는 같고 동일한 결과를 줄 것으로 기대되는 두 가지 쿼리가 있습니다. 그러나 그들은하지 않습니다. 다음과 같이 쿼리는 다음과 같습니다두 개의 유사한 MySQL 쿼리가 다른 결과를 나타냅니다.

첫 번째 쿼리 :

select max(datetime), reading 
from READINGS 
where device_id = '1234567890' 

두 번째 쿼리

select datetime, reading 
from READINGS 
where device_id = '1234567890' and datetime = (select max(datetime) 
               from READINGS 
               where device_id = '1234567890') 

(가) 둘 다 읽기 속성에 대한 다른 결과를 제공합니다. 두 번째는 올바른 결과를 제공하지만 첫 번째 이유는 다른 결과를주는 이유는 무엇입니까?

답변

3

이것은 직장에서의 MySQL 동작입니다. 그룹화를 사용하면 선택한 열은 그룹에 표시되거나 집계 함수 (예 : min(), max()) 여야합니다. 대부분의 다른 데이터베이스 유형에서는 집계와 일반 열을 함께 사용할 수 없습니다.

첫 번째 쿼리는 각 그룹의 첫 번째 등급 (파일 시스템에 표시된 위치의 첫 번째 등급)을 반환하며 이는 가장 잘못된 것입니다.

두 번째 쿼리는 등급을 정확한 시간 스탬프와 연결하여 정확한 결과를 얻습니다.

+0

그래서 MSSQL과 같은 것에서 처음 시도해 본다면 아마도 나에게 해를 끼쳐서 내가 잘못했다고 말해 줄 수 있을까? – Perley

+0

첫 번째 쿼리에 대해 @Perley? 아마도 SQLite만이 MySQL과 같은 방식으로 동작한다고 믿습니다. –

2

두 쿼리 모두에서 사용해야하는 GROUP BY reading 절을 사용하지 않았기 때문입니다.

+0

를 참조하십시오. 그것은 나에게 완전히 다른 것을 준다. 그리고 왜 내가 집계하고있는 것조차도 읽을 때 그룹을 사용하고 싶습니까? – Perley

0

쿼리에 대한 자세한 내용을 보려면 ExplainExplan extended 명령을 사용할 수 있습니다.

관련 문제