【问题标题】:Select MAX(ID) mysql选择 MAX(ID) mysql
【发布时间】:2014-09-23 12:43:35
【问题描述】:

我想将mysql记录与idorig分组并选择最大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

我的 SQL 请求是:

SELECT MAX(id),message,idorig,status FROM messages GROUP BY idorig order by id desc

sql返回好​​的id:102

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

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

【问题讨论】:

    标签: mysql group-by


    【解决方案1】:

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

    Select id, idorig, message, status where id in (SELECT MAX(id) FROM messages GROUP BY idorig)
    

    MySQL 将为每个组(唯一的)获取 Max(id),然后在父查询中使用它从该详细信息记录中选择感兴趣的数据。

    【讨论】:

    • 这是我想要的结果
    【解决方案2】:
    select ID,idorig,Message,Status from messages order by ID desc limit 1;
    

    或

    Select ID,idorig,Message,Status from messages where ID = (select max(ID) from messages);
    

    【讨论】:

    • 第一个是最好的逻辑。
    • 我不太确定这是否是作者想要的效果。让我们等待他的想法。
    • 是的我忘了说,请求可能会返回多个结果,我基本上是想显示一个消息列表,按ID分组选择每个组的最新ID(我编辑了原帖)跨度>
    • 在这种情况下,我怀疑@estshy 下面的解决方案可能是您正在寻找的。​​span>
    【解决方案3】:
    SELECT id,message,idorig,status FROM messages where id = (select max(ID) from messages GROUP BY idorig)  order by id desc
    

    【讨论】:

    • 您在子查询中有组语句(可以返回多个结果),然后您尝试将其与单个变量进行比较。它不会在所有情况下都能正常工作。
    【解决方案4】:
    Select id, idorig, message, status where id in (SELECT MAX(id) FROM messages GROUP BY idorig)
    

    【讨论】:

    • 由于未找到 from 子句,这肯定会给出错误消息。
    • 又因为查询前后有多个空格^_^
    猜你喜欢
    • 2022-10-06
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    • 2021-08-02
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多