mysql - 在 MySQL 中为版本化数据指定 MAX 组函数
问题描述
我有以下 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
,而不是所有 ( *
) 字段。任何人都可以在这里帮助我越过终点线吗?
解决方案
您可以尝试通过 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
推荐阅读
- swift - Swift - Google AdMob 根本不提供广告
- haskell - 连续列表元素的 Haskell 模式匹配
- c# - 将自定义上下文添加到登录页面身份服务器 4
- javascript - 有没有一种有效的方法可以在 Javascript 中创建图像数组,而无需将每个单独的图像添加到数组中?
- mysql - 如何在nodejs中处理mysql select查询返回的数据
- html - 我怎样才能让我自定义字体真棒图标?
- algorithm - 给定一组要拼接的索引,生成删除每个元素的顺序
- javascript - Javascript 正则表达式以匹配以给定模式开头的代码块
- android-management-api - 从 Android Device Policy 获取设备标识符
- td-engine - 使用idea的UI从tdengine查询数据,时间戳会丢失毫秒