mysql 中的不同最新版本

Distinct latest versions in mysql

我的 mysql table 中有一列是这样的:

应用程序版本

5.16.0.2889
5.16.0.2893
5.14.0
5.14.0.3
5.12.0.1
5.15.0.14
5.1.0.2
5.12.0.3

我想根据前两个数字将本专栏的不同最新版本分开(a.b.c.d 然后只将 a.b 视为一个版本)

就像这里我们假设 3 个不同的最新版本是:

5.16.0.2893
5.16.0.2889
5.15.0.14
5.14.0.3
5.14.0

有人可以建议 mysql 对此进行查询吗?

最新定义: 假设我们有

5.14.0.9
5.12.0.4
6.1.0.2
5.14.0.12
5.16.1.2
5.12.1.1

不同的最新 3 将是

6.1.0.2
5.16.1.2
5.14.0.12
5.14.0.9
SELECT VersNo
FROM (
SELECT  DISTINCT SUBSTRING_INDEX(appVersion,'.',2) AS 'VersionNo',appVersion AS 'VersNo'
FROM table
ORDER BY appVersion)s
ORDER BY VersNo;

我从你的问题中了解到,你需要显示 3 个最新的 "a.b" 类型的版本,但它的所有颠覆。这是有效的代码:

     select ver from app inner join 
  (select CONCAT(LPAD(SUBSTRING_INDEX(ver, '.', 1), 50, '0'),
LPAD(SUBSTRING(ver, LOCATE('.', ver)+1, LOCATE('.', ver, LOCATE('.', ver)+1)), 50, '0')) as ver2
from app group by ver2 order by ver2 desc limit 3) as v2 
on CONCAT(LPAD(SUBSTRING_INDEX(ver, '.', 1), 50, '0'),
LPAD(SUBSTRING(ver, LOCATE('.', ver)+1, LOCATE('.', ver, LOCATE('.', ver)+1)), 50, '0')) = v2.ver2 
order by v2.ver2 desc

内部查询吐出表单'a.0000b'的前3个版本,内部连接将所有版本匹配到'a.b' = 'c.d'