You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 22:59:07