Mysql分组依据和唯一值

Mysql分组依据和唯一值,mysql,group-by,grouping,Mysql,Group By,Grouping,我在MySQL中有一个表: 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 SID未

我在MySQL中有一个表:

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 SID未指定消息的MessageType日期 1255日志2010-01-17 15:02:05日志信息1 2255用户2010-01-17 19:02:05用户信息1 日志2010-01-17 15:06:55日志消息2 4211管理员2010-01-17 22:06:55管理员消息1 我需要获取最后一条(按DateOf)消息和消息类型,按DID分组, 按描述日期订购

正确的结果是:

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 消息类型是否为消息的日期 211管理员2010-01-1722:06:55管理员消息1 255用户2010-01-17 19:02:05用户信息1 如何执行此选择查询?MySQL 5.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和DID的行。 外部查询中的GROUP BY确保每个DID的结果中只有一行(如果表中有多行具有相同的DID和DateOf,则返回其中一行,但不带任何特定顺序)

另一个解决方案:

SELECT * FROM test t WHERE DateOf = (
    SELECT MAX(DateOf) FROM test t2 WHERE t2.DID = t.DID
) ORDER BY DateOf DESC;
不久前,当我解决这个问题时,我在谷歌上搜索了这篇有用的文章:

SELECT * FROM test t WHERE DateOf = (
    SELECT MAX(DateOf) FROM test t2 WHERE t2.DID = t.DID
) ORDER BY DateOf DESC;