2016-04-04 13 views
0

私はデータベースに次のテーブルを持っています。私はそれぞれのuser_idのためtimeidによって並べ替えられ、最新の行のみを抽出するにはどうすればよい特定の列のデータベースから最新の行を抽出する方法は?

+----+---------+---------------------+-----------+ 
| id | user_id | timeid    | course_id | 
+----+---------+---------------------+-----------+ 
| 02 |  2 | 2016-01-27 19:24:17 |  14 | 
| 03 |  2 | 2016-02-27 19:24:27 |  15 | 
| 04 |  2 | 2016-03-27 19:24:37 |  16 | 
| 05 |  3 | 2016-01-27 19:24:17 |  19 | 
| 06 |  3 | 2016-02-27 19:24:27 |  18 | 
| 07 |  3 | 2016-03-27 19:24:37 |  17 | 
+----+---------+---------------------+-----------+ 

?言い換えれば

| 04 |  2 | 2016-03-27 19:24:37 |  16 | 
| 07 |  3 | 2016-03-27 19:24:37 |  17 | 

答えて

2

簡単な方法は=と相関サブクエリ使用しています:あなたは「はエラーを得まし

select t.* 
from t 
where t.timeid = (select max(t2.timeid) from t t2 where t2.user_id = t.user_id); 
0

あなたは、あなたが次のクエリを使用することができます

SELECT id, user_id, timeid, course_id FROM tablename ORDER BY timeid DESC GROUP BY user_id; 
1

のようにMySQLのクエリを使用することができます。

SELECT t1.id, t1.user_id, t1.timeid, t1.course_id 
FROM mytable as t1 
JOIN (
    SELECT user_id, MAX(timeid) AS timeid 
    FROM mytable 
    GROUP BY user_id 
) AS t2 ON t1.user_id = t2.user_id AND t1.timeid = t2.timeid 

t2を最新を含む派生テーブルですtimeid値/ user_id。元のテーブルをこれに結合すると、最新のグループごとの値を持つレコードのすべてのフィールドを取り戻すことができます。

+0

を、私はそれがあるべきと仮定し 'とt1.timeid = t2.timeid'の代わりに、'とt1.timeid = t2.user_id'。 – pilsetnieks

+0

@pilsetnieksはい、あなたは正しいです。修正しました。 –

関連する問題