2010-01-17 6 views
1

j'ai une table MySQL:Mysql GROUP BY et les valeurs uniques

 
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 

J'ai besoin pour obtenir la dernière (par DateOf) Message et MessageType, groupped par des SAVIEZ, commandé par DateOf DESC

droit le résultat serait:

 
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 

Comment faire cette sélection? MySQL 5.1

Répondre

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

La sous-requête sélectionne DateOf max pour chaque SDA. La requête externe sélectionne les lignes avec DateOf et DID. GROUP BY dans la requête externe s'assure qu'il n'y a qu'une seule ligne dans le résultat pour chaque DID (dans le cas où il y a plus d'une ligne avec le même DID et DateOf dans la table, alors il retourne l'un d'eux sans ordre particulier).