2012-07-19 43 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