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'
我的 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'