选择MAX(ID)mysql

Nat*_*han 10 mysql group-by

我想用idorig分组mysql记录并选择最大id以选择最新记录.

我的数据库内容是这样的:

ID     | IDORIG     | MESSAGE    | STATUS
100    | 100        | azerty     | 2
101    | 100        | azerty     | 1
102    | 100        | azerty     | 1
103    | 100        | azerty     | 0
104    | 104        | azerty     | 0
105    | 104        | azerty     | 0
106    | 104        | azerty     | 0
107    | 104        | azerty     | 0
108    | 104        | azerty     | 0
Run Code Online (Sandbox Code Playgroud)

我的SQL请求是:

SELECT MAX(id),message,idorig,status FROM messages GROUP BY idorig order by id desc
Run Code Online (Sandbox Code Playgroud)

sql返回好​​的id:102

但问题是,如果我尝试返回状态,我得到2而不是0

如何更改sql请求以获取组idorig的最新ID,甚至获取102而不是100的记录

Mat*_*wak 14

错误发生,因为MySQL不知道分组记录中的哪个状态会导致您.它知道你想从组中获取max(id),但根据状态不明显.一些SQL引擎会触发异常而不是MySQL.我猜它会从组返回第一条记录(在这种情况下状态= 2).你可以这样做

Select id, idorig, message, status where id in (SELECT MAX(id) FROM messages GROUP BY idorig)
Run Code Online (Sandbox Code Playgroud)

MySQL将获得每个组的Max(id)(这是唯一的),然后在父查询中使用它从这些详细记录中选择有趣的数据.


Gil*_*les 6

select ID,idorig,Message,Status from messages order by ID desc limit 1;
Run Code Online (Sandbox Code Playgroud)

或者

Select ID,idorig,Message,Status from messages where ID = (select max(ID) from messages);
Run Code Online (Sandbox Code Playgroud)