2012-07-19 51 views
0

如何获得按最大列排序并按ID分组的行列表?我始终得到正确的最大值,但其他字段是从其他行获得的。MySQL:MAX不返回

我使用了以下内容:

SELECT p.* 
      FROM `logs` AS p 
      JOIN 
      (SELECT person_id, 
      MAX(`datetime`) AS datetime 
      FROM `logs` 
      GROUP BY `person_id` 
      ) AS pg 
      ON pg.person_id = p.person_id 
      AND pg.`datetime` = p.datetime 
      group by person_id 

哪里是我的查询错了吗?日期时间和人员ID总是正确的,但其他字段不是。

+0

这是错误的,因为你是一个聚集函数之外选择字段,你没有通过分组。 http://dev.mysql.com/doc/refman/5.6/en/group-by-hidden-columns.html – 2012-07-19 00:05:52

+0

你会怎么做? – luqita 2012-07-19 00:31:25

回答

0

SELECT MIN(日期时间)并不总是返回最小的日期时间 值。与MAX相同。

临时解决方法:

 SELECT p.* 
     FROM `logs` AS p 
     JOIN 
       (SELECT person_id, 
         MAX(CAST(`datetime` as CHAR(25))) AS `datetime` 
       FROM `logs` 
       GROUP BY `person_id` 
       ) AS pg 
        ON pg.person_id = p.person_id AND 
       pg.`datetime` = p.datetime 
     group by person_id 
0

请尝试以下:

SELECT logs.* 
    FROM (SELECT person_id, 
      MAX(`datetime`) AS latest 
      FROM `logs` 
     GROUP BY person_id) AS dt 
INNER 
    JOIN logs 
    ON logs.person_id= dt.person_id 
    AND logs.datetime= dt.latest