意外的 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
我有一个 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