2

私は2つのテーブルを持っています:

users:
user_id    user_name

data:
user_id    user_data    user_time

データテーブルから最新のエントリを選択したいのですが、user_name, user_id, user_dataとを返しuser_timeます。

次のクエリを試しましたが、各ユーザーの最後ではなく、最初のエントリが返されます。

sql = "SELECT users.user_name, users.user_id, data.user_data, data.user_time
FROM users 
INNER JOIN data ON data.user_id = users.user_id
GROUP BY users.user_name
ORDER BY data.user_time DESC";
4

1 に答える 1

9

GROUP BY と MAX を使用します。WHERE...IN:

SELECT u.user_id, u.user_name, d.user_data, d.user_time
FROM users u
    INNER JOIN data d ON d.user_id = u.user_id
WHERE (d.user_id, d.user_time) = 
    (SELECT user_id, MAX(user_time) FROM data GROUP BY user_id)

data_idデータテーブルに列を追加したほうがいいと思います。data_id を除き、user_id と user_time の両方が必要ですPRIMARY KEY(また、user_time は常に一意であるとは限らず、信頼できません)

data_id がある場合は、少し単純になります。

SELECT u.user_id, u.user_name, d.user_data, d.user_time
FROM users u
  INNER JOIN data d ON d.data_id =
    (SELECT data_id FROM data
       WHERE user_id = u.user_id ORDER BY data_time DESC LIMIT 1) 
于 2012-04-25T20:52:21.997 に答える