意外的 GROUP BY 行为 MySQL?

Unexpected GROUP BY behavior MySQL?

我有一个 table Quotes 数据像

id  number    revision    status      amount
============================================
1    6681         1       Open       1000.00
2    6681         2       Open       5421.00
3    6681         3       Open       1246.12
4    6681         4       Received   8444.12
5    1251         1       Open        412.42

需要注意的重要一点是,每个报价可以有多个修订,具有不同的金额和其他信息。

我有一个 table 和一个 SELECT 查询,其中一个选项是只查看每个引用的最新版本。我曾尝试通过群组文本来实现这一目标。

正常查询是

SELECT
number, revision, status, amount
FROM quotes
ORDER BY id DESC

我的 GROUP BY 版本是

SELECT
number, MAX(revision) as `revision`, status, amount
FROM quotes
GROUP BY number
ORDER BY id DESC

我认为这个分组 select 每组数字的最高修订版,但它混合和匹配,我得到这个

number    revision    status    amount
=======================================
6681         4         Open      1000.00

我得到了正确的编号和修订,但状态显示为打开,金额是修订 1 的金额,而不是第四次修订的金额。知道我的语法有什么问题吗?

您可以使用以下内容,使用子查询获取报价的最新修订。您可以使用 table INNER JOIN 此子查询来获取每组最新修订的整行 (number):

SELECT quotes.* 
FROM quotes INNER JOIN (
  SELECT number, MAX(revision) AS revision
  FROM quotes
  GROUP BY number
) max_quotes ON quotes.number = max_quotes.number AND quotes.revision = max_quotes.revision
ORDER BY id DESC

demo on dbfiddle.uk