2010-01-17 4 views
1

내가 MySQL의에서 테이블을 가지고 :MySQL의 GROUP BY 및 고유 값

 
SID DID MessageType DateOf Message 
1 255 LOG  2010-01-17 15:02:05 Log msg 1  
2 255 USER 2010-01-17 19:02:05 User msg 1 
3 211 LOG  2010-01-17 15:06:55 Log msg 2  
4 211 ADMIN 2010-01-17 22:06:55 Admin msg 1 

내가 메시지와 메세지 유형 (DateOf에 의해) 마지막 얻을 필요가, DID 그룹화 된 의해, DateOf DESC

오른쪽으로 정렬 결과는 다음과 같습니다.

 
DID MessageType DateOf Message 
211 ADMIN  2010-01-17 22:06:55 Admin msg 1 
255 USER  2010-01-17 19:02:05 User msg 1 

어떻게이 선택 쿼리를 수행 할 수 있습니까? MySQL 5.1

답변

1
SELECT * FROM `test` WHERE (DID,DateOf) IN (
    SELECT DID,MAX(DateOf) FROM `test` GROUP BY DID 
) GROUP BY DID ORDER BY DateOf DESC 

하위 쿼리는 각 DID에 대해 최대 DateOf를 선택합니다. 외부 쿼리는 해당 DateOf 및 DID가있는 행을 선택합니다. 외부 쿼리의 GROUP BY는 각 DID에 대해 결과에 행이 하나만 있음을 보장합니다 (테이블에 동일한 DID 및 DateOf가있는 행이 여러 개있는 경우 특정 순서없이 그 중 하나를 반환 함).