2017-07-17 48 views
0

很簡單的選擇,但我很困惑:的MySQL 5.7組的最新記錄

create table users (id int, type int); 
insert into users values(1, 100), (2, 101), (3, 100); 
mysql> select * from users;                            
+------+------+                               
| id | type |                                                 
+------+------+                                                 
| 1 | 100 |                                                 
| 2 | 101 |                                                 
| 3 | 100 |                                                 
+------+------+ 

我想要得到的結果是:

+------+------+ 
| id | type | 
+------+------+ 
| 3 | 100 | 
| 2 | 101 | 
+------+------+ 

我的查詢是:

MySQL版本5.7回報:

mysql> select * from (select * from users order by id desc) as t group by type; 
+------+------+ 
| id | type | 
+------+------+ 
| 1 | 100 | 
| 2 | 101 | 
+------+------+ 

在MySQL 5.5中它按預期工作。 sql_mode爲NULL

感謝您的回覆。擴展表有更清晰的結果:

create table users (id int, type int, level int); 
insert into users values(1, 100, 1000), (2, 101, 1001), (3, 100, 1002); 

mysql> select max(id), type, level from users group by type; 
+---------+------+-------+ 
| max(id) | type | level | 
+---------+------+-------+ 
|  3 | 100 | 1000 | <- expected 1002 
|  2 | 101 | 1001 | 
+---------+------+-------+ 

這工作:

mysql> SELECT t1.* FROM users t1 INNER JOIN (SELECT type, MAX(id) AS max_id FROM users GROUP BY type) t2 ON t1.type = t2.type AND t1.id = t2.max_id ORDER BY id DESC; 
+------+------+-------+ 
| id | type | level | 
+------+------+-------+ 
| 3 | 100 | 1002 | 
| 2 | 101 | 1001 | 
+------+------+-------+ 

回答

1

爲了完整起見,我可以提供下面的查詢,如果你想用任意數量的列返回整個記錄,那麼這個查詢就可以工作。

SELECT t1.* 
FROM users t1 
INNER JOIN 
(
    SELECT type, MAX(id) AS max_id 
    FROM users 
    GROUP BY type 
) t2 
    ON t1.type = t2.type AND 
     t1.id = t2.max_id 
+0

您的查詢工作。謝謝。 –

1

你應該

select max(id), type 
from users 
group by type; 
order by id desc 

結果在mysql5.5不是基於使用聚合函數和組group by is ..(這個beahvior在sql中不推薦使用,默認在sql_mode中不允許使用5.7)

0

GRO很少有SQL語言(甚至可能只有MySQL)支持UP BY,沒有聚合。事實上,它在5.5中的預期效果(大部分)只是方便的,而不是由MySQL保證的。正式地,它從非分組的非聚合字段獲取有效的隨機值(從組的行中遇到)。