2017-10-18 14 views
-2

ための最も実際の行を選択したいMySQLのクエリは、私は、このテーブルを持っているそれぞれの人

id|name|number|date 
1|peter|2|2017-09-18 
2|peter|1|2017-10-03 
3|james|4|2017-09-05 
4|james|1|2017-10-10 
5|james|0|2017-10-15 
6|kate|4|2017-09-16 
7|kate|2|2017-10-17 

私は一人一人のための最も実際の行(最新の日付を持つ行)を選択します。結果は次のようになります

2|peter|1|2017-10-03 
5|james|0|2017-10-15 
7|kate|2|2017-10-17 

どのMYSQLクエリでこれが可能ですか?以下のような

何か:

SELECT id, name, number, date 
FROM table 
GROUP BY id, name, number, date 
HAVING date the latest 
+0

各人の「*最も実際の行*」の資格は何ですか? –

+0

*最新*の日付を意味しますか? –

+0

はい、最新の日付を意味します。私は自分の英語を残念に思っています。 –

答えて

0
select t1.* from table t1, (select t2.name name2, max(t2.date) 
date2 from table t2 group by t2.name) t3 where t1.name = t3.name2 and t1.date = t3.date2 
+0

「サブクエリは1行以上返します」というエラー:( –

+1

短い説明を追加してください – Moes

+0

Ok、編集済みの回答をお試しください –

0

SELECT * FROM persons WHERE name='someone' order by date desc limit 1

これは、指定した名前で最新のエンティティを選択するために適しています。私は私の携帯電話でこれを書いた

SELECT * FROM persons GROUP BY name, date ORDER BY date DESC

は、何かが間違っている可能性がありますが、その概念は正しくなります。

0
MariaDB [test]> select * from stack s1 where s1.d = (select max(s2.d) 
from stack s2 where s2.name = s1.name); 
+------+-------+------+------------+ 
| id | name | num | d   | 
+------+-------+------+------------+ 
| 2 | peter | 1 | 2017-10-03 | 
| 5 | james | 0 | 2017-10-15 | 
| 7 | kate | 2 | 2017-10-17 | 
+------+-------+------+------------+ 
3 rows in set (0.00 sec) 

大規模なデータセットの場合は、「名前」および「d」列にインデックスを追加することを忘れないでください。

関連する問題