0

最大列で並べ替えられ、ID でグループ化された行のリストを取得するにはどうすればよいですか? 正しい最大値を取得し続けますが、他のフィールドは他の行から取得されます。

私は以下を使用しています:

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 は常に正しいですが、他のフィールドは正しくありません。

4

3 に答える 3

0

これを参照してください:http://bugs.mysql.com/bug.php?id = 54784

于 2012-07-19T00:06:21.347 に答える
0

SELECT MIN(datetime) は、常に最小の日時値を返すとは限りません。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
于 2012-07-19T00:10:43.447 に答える
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       
于 2012-07-19T00:55:21.297 に答える