0

我有以下 MySQL 表:

[orders]
===
order_id BIGINT UNSIGNED AUTO INCREMENT (primary key)
order_ref_id VARCHAR(36) NOT NULL,
order_version BIGINT NOT NULL,
order_name VARCHAR(100) NOT NULL
...
lots of other fields

订单是“版本化的”,这意味着多个订单可以具有相同的相同order_ref_id但会有不同的版本(版本 0、版本 1、版本 2 等)。

我想编写一个查询,根据订单order_ref_id及其MAX版本返回订单的所有订单字段,如下所示:

SELECT
  *
FROM
  orders
WHERE
  order_ref_id = '12345'
  AND
  MAX(order_version)

换句话说:给定org_ref_id,给我具有最高版本号的单个orders记录。因此,如果表中存在以下行:

order_id  | order_ref_id  |. order_version | order_name
======================================================================
1         |  12345        | 0              | "Hello"
2         |  12345        | 1              | "Goodbye"
3         |  12345        | 2              | "Wazzup"

我想要一个将返回的查询:

3         |  12345        | 2              | "Wazzup"

但是,上述查询无效,并产生:

ERROR 1111 (HY000): Invalid use of group function

知道典型的MAX()例子会让我写出类似的东西

SELECT
  MAX(order_version)
FROM
  orders
WHERE
  order_ref_id = '12345';

但这只是给了我order_version,而不是所有 ( *) 字段。任何人都可以在这里帮助我越过终点线吗?

4

1 回答 1

1

您可以尝试通过 order_ref_id 对最大版本组使用子查询

    select * from  orders  o 
    inner join (
        SELECT order_ref_id
           , MAX(order_version) max_ver
        FROM   orders
        group by  order_ref_id
    ) t on t.order_ref_id = o.order_ref_id 
            and t.max_ver = o.order_version
于 2020-07-21T18:46:56.833 回答