MySQL查询:按a.b主版本分组获取指定数量最新唯一版本
解决方案:按主版本组筛选并获取对应所有版本
要实现你的需求,我们可以通过MySQL的字符串处理函数和排序逻辑来完成,核心是先识别出最新的3个主版本组(a.b格式),再提取这些组下的所有版本并按版本号降序排列。
方法一:使用VERSION_COMPARE函数(推荐,简洁准确)
VERSION_COMPARE是MySQL专门用于版本号比较的函数,能自动处理不同长度的版本号(比如5.14.0和5.14.0.3),非常适合这个场景。
SELECT t.appVersion FROM your_table t JOIN ( -- 第一步:获取最新的3个主版本组(a.b) SELECT DISTINCT SUBSTRING_INDEX(appVersion, '.', 2) AS main_version FROM your_table ORDER BY VERSION_COMPARE(main_version, '0') DESC LIMIT 3 ) AS top_main_versions ON SUBSTRING_INDEX(t.appVersion, '.', 2) = top_main_versions.main_version -- 第二步:按主版本组优先级、版本号优先级降序排列 ORDER BY VERSION_COMPARE(top_main_versions.main_version, '0') DESC, VERSION_COMPARE(t.appVersion, '0') DESC;
方法二:拆分版本号为数字排序(兼容所有MySQL版本)
如果你的MySQL版本非常老旧(不支持VERSION_COMPARE),可以通过拆分版本号的各个段为整数来实现精准排序:
SELECT t.appVersion FROM your_table t JOIN ( -- 提取并排序主版本组,取前3个 SELECT DISTINCT SUBSTRING_INDEX(appVersion, '.', 2) AS main_version FROM your_table ORDER BY CAST(SUBSTRING_INDEX(main_version, '.', 1) AS UNSIGNED) DESC, CAST(SUBSTRING_INDEX(main_version, '.', -1) AS UNSIGNED) DESC LIMIT 3 ) AS top_main_versions ON SUBSTRING_INDEX(t.appVersion, '.', 2) = top_main_versions.main_version -- 按主版本组、完整版本号的各段数字降序排列 ORDER BY CAST(SUBSTRING_INDEX(top_main_versions.main_version, '.', 1) AS UNSIGNED) DESC, CAST(SUBSTRING_INDEX(top_main_versions.main_version, '.', -1) AS UNSIGNED) DESC, CAST(SUBSTRING_INDEX(t.appVersion, '.', 1) AS UNSIGNED) DESC, CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(t.appVersion, '.', 2), '.', -1) AS UNSIGNED) DESC, CAST(IFNULL(SUBSTRING_INDEX(SUBSTRING_INDEX(t.appVersion, '.', 3), '.', -1), 0) AS UNSIGNED) DESC, CAST(IFNULL(SUBSTRING_INDEX(t.appVersion, '.', -1), 0) AS UNSIGNED) DESC;
关键逻辑说明
- 提取主版本组:用
SUBSTRING_INDEX(appVersion, '.', 2)截取版本号的前两段(比如从5.16.0.2889得到5.16)。 - 筛选Top3主版本组:通过排序(要么用
VERSION_COMPARE,要么拆分数字)取最新的3个主版本组。 - 关联获取对应版本:将原表与Top3主版本组关联,得到这些组下的所有版本,并按优先级排序。
测试验证
用你提供的示例数据:
输入版本:5.14.0.9、5.12.0.4、6.1.0.2、5.14.0.12、5.16.1.2、5.12.1.1
执行上述SQL后,会得到结果:6.1.0.2、5.16.1.2、5.14.0.12、5.14.0.9,完全符合你的需求。
内容的提问来源于stack exchange,提问作者batman
相关产品推荐
相关产品推荐

