2017-10-18 44 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

好吧,請嘗試編輯答案 –

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) 

對於大型數據集,不要忘記將索引添加到'name'和'd'列。